Our team's vision processing runs solely on the laptop, and periodically saves stills. We do this by extending SmartDashboard's WPICameraExtension class, doing image processing with OpenCV in the processImage() method and sending data back to the robot via NetworkTables. To save stills, it periodically spawns off a low-priority thread which saves a timestamped jpg. If you want to know how to make a WPICameraExtension with OpenCV processing, check out
Miss Daisy's 2012 vision code. For saving an image, you can just use Java's javax.imageio.ImageIO class.