There are tools like crazy bump that attempt to guess the shapes from a texture and generate height and normal maps from it. But the results, especially for height maps, are often really bad so I decided to create a high poly mesh from the texture and have a much better heightmap generated from it. Since Blender
is free and the only modelling tool I have some experience with, that's what I use (version 2.68). And as you are going to notice, I sometimes call it a height map and sometimes a displacement map, but actually mean the same.
I do expect some basic blender knowledge (navigation with mouse wheel, middle mouse button and shift+middle mouse button and probably some other things, so don't take this as a beginner Blender tutorial).