It simply adds two new targets to which buffer objects can be bound: GL_PIXEL_PACK_BUFFER and GL_PIXEL_UNPACK_BUFFER. When a buffer object is bound to the GL_PIXEL_PACK_BUFFER target, commands such as glReadPixels pack (write) their data into a buffer object. When a buffer object is bound to the GL_PIXEL_UNPACK_BUFFER target, commands such as glDrawPixels and glTexImage2D unpack (read) their data from a buffer object.
A buffer initially filled with vertex data can be bound to one of the pixel buffer targets and used for pixel operations and vice versa. You would render an image using some shader and read back the data from the color buffer into a PBO using glReadPixels(), and the use this buffer as a source for vertex data.
Reference:
More OpenGL Game Programming