This is a tool I developed primarily for my needs, but there's no reason why I can't share it with you. I hope you'll find it useful.
I think the name explains it all, but take a look at this screen to see how does the interface look like

So, here is how you use it:
1. Load a height map;
1.1. If you want, you can also load a diffuse map to get a better idea of how will the normal map look like. If not, the height map will be used as a diffuse map.
2. Play with the amplitude value to get the desired effect.
3. Choose a file name for the normal map. IF YOU DON'T CHANGE IT, IT WILL OVERWRITE YOUR ORIGINAL HEIGHT MAP(this is on purpose)
4. Hit the Save Normal Map button.
Changelog for 1.1
- The application is now forced to save the original height value into the alpha channel(this is kind of fundamental for parallax mapping). Up until now, the height value was only saved if the height map file was 32 bit on disc.
Changelog for 2.0
- Pre-compiled linux binary included!
- Compiled with Irrlicht 1.8
- Reworked the GUI
- Now using a custom subdivided cube mesh for the visualization, 8 interpolated normals of the irrlicht default one just weren't good enough
- You can now use mouse dragging to rotate the cube(this is still a bit glitchy but works mostly fine)
- Added VSync
- Cool new message boxes on normal map save success/fail!
- General optimizations(textures that are not needed anymore are removed automatically)
Changelog for 2.1
- Fixed a Linux crash
- Improved mouse input on Linux, but it's still not as good as on Windows
Download (pre-compiled windows and linux binary plus source with a CB gcc project and a linux makefile)
Released under zlib licence.
Have fun!