Miss Daisy's code from last year is a great example of how to use SmartDashboard and OpenCV to process images and then send the data back to the robot.
As for where to do processing, I would definitely advocate doing it on the driver station laptop. You have much more processing power available and your processing is very unlikely to compromise the robot's operations -- it's much harder to lag a laptop than a cRIO. Also, your camera will only stream to one location, while if you're processing on the cRIO and also providing a stream to the dashboard, that's double the bandwidth usage. This can be minimized by having the camera send images to the cRIO with a lower frequency, but it can't be entirely eliminated if both are receiving images.
The image, by the way, is not on the cRIO. All images are streamed directly from the camera, and if you are processing on the laptop, the cRIO does not receive any images at all. SmartDashboard uses the FFMPEG library to retrieve the images from the camera, so you don't have to worry about that bit.