Your code is good- verified in this Fiddle with a friendly fish: http://jsfiddle.net/Qrufy/
img {
opacity: 0.5;
filter: alpha(opacity=40);
}
img:hover {
opacity: 1.0;
filter: alpha(opacity=100);
}

The opacity property works in all modern browsers, and the filter:alpha covers <= IE8.