Koletta,
Si bien tu metodo es quiza mas sencillo en algunos sentidos, no es la solucion mas practica y precisa imagenes adicionales que no son necesarias. "Opacity" fue implementado justamente para no precisar de instrucciones como esas.
Sin embargo Opacity creo aun no funciona en IE, o no funciona en la mayoria de las versiones. Aunque en firefox y chrome no deberias tener problema siempre y cuando uses los vendor prefixes (-mox- y -webkit- )
Te recomiendo, si quieres que ademas el cambio de opacidad sea gradual, añadas la instruccion "transition"
digamos que tienes un img con class "abc"
.abc img{
opacity: 0.5;
transition: all 0.3 ease;
}
.abc img:hover{
opacity:1;
}
Esto te daria un cambio de opacidad mas sutil y gradual. ( no olvides poner tambien vendor prefixes en la instruccion transition. )
En el siguiente sitio, el cambio de color de los botones del menu esta tambien hecho con :hover y transition