Unwrapping a 2D image for use in wrapping in 3D

I’ve been looking all over for this, but have so far been unsuccessful. I’ve searched here, and found one reference to the concept, but it didn’t really get an answer.
Let’s say I’ve got a photo of a cylinder. What I’d like to do is “unwrap” the surface of the cylinder in the photo so the cylinder face looks flat and undistorted, as if I took a label on the surface of the cylinder and peeled it off.
From what I’ve read of Blender, that’s not what this program does. Yes? No? Is anyone familiar with a package that can do what I’m asking?
Basically, I imagine it working like projecting the vertices of a Blender UV map to a 2D plane, Placing those projected points onto the 2D image, and then stretching the image so the result is the undistorted UV map that will get wrapped around the 3D object.

yea, just use a plane mesh put in about 6 loop cuts, and in the UV image window just match up the UV veerts on the top and bottom of the can.

So this will allow me to stretch a 2D image of a cylinder so it looks like I peeled the label off of it? I didn’t know that Blender could modify 2D images?