Ejemplo de como guardar una imagen a disco, como recorrer la imagen y uso de canny

/*Código de ejemplo:
        Francisco Carlos Calderón
        Libre de modificar difundir y aprender
        2009
        */
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
    /* Declaración de *IplImage */
    IplImage* Orig_Frame = 0;
    IplImage* im_color;
    IplImage* im_1d;
 
 
 
    /* 1. Capturando y mostrando en pantalla */
 
    Orig_Frame = cvLoadImage("lena.jpg", CV_LOAD_IMAGE_COLOR );
    if(Orig_Frame == 0)//si no hay nada en la imagen salga. puede contener salida al usuario para mejor debuging :)
    return -1;
    cvNamedWindow ("Original", CV_WINDOW_AUTOSIZE);
    cvShowImage ("Original", Orig_Frame);
    im_color = cvCreateImage( cvSize(Orig_Frame->width,Orig_Frame->height), Orig_Frame->depth, Orig_Frame->nChannels );
    im_1d    = cvCreateImage( cvSize(Orig_Frame->width,Orig_Frame->height), Orig_Frame->depth, 1 );//tiene la misma profundidad pero un solo canal
    for( int y=0; y<im_color->height; y++ )//solo para ejemplo de como recorrer dos o mas imagenes al tiempo, para sacar negativo use cvNot
    {
        uchar* tmp_apun = (uchar*) (im_color->imageData + y * im_color->widthStep);
        uchar* tmp_apun2 = (uchar*) (Orig_Frame->imageData + y * Orig_Frame->widthStep);
        for( int x=0; x<im_color->width; x++ ) {
            tmp_apun[im_color->nChannels*x+0] = 255 - tmp_apun2[Orig_Frame->nChannels*x+0];
            tmp_apun[im_color->nChannels*x+1] = 255 - tmp_apun2[Orig_Frame->nChannels*x+1];
            tmp_apun[im_color->nChannels*x+2] = 255 - tmp_apun2[Orig_Frame->nChannels*x+2];
        }
    }
 
    cvSaveImage("lena_negativo.jpg",im_color );
 
    /*soporta:
    * Windows bitmaps - BMP, DIB;
    * JPEG files - JPEG, JPG, JPE;
    * Portable Network Graphics - PNG;
    * Portable image format - PBM, PGM, PPM;
    * Sun rasters - SR, RAS;
    * TIFF files - TIFF, TIF;
    * OpenEXR HDR images - EXR;
    * JPEG 2000 images - jp2. */
    cvSetImageCOI(Orig_Frame,2);//voy a sacarle bordes nada mas a un canal "el 2 verde", pude también convertir a BW
    cvCopy(Orig_Frame,im_1d);
    cvSetImageCOI(Orig_Frame,0);//reset del COI
    cvCanny(im_1d,im_1d,110,217,3);
    cvSaveImage("lena_canny.png",im_1d );
    cvSmooth(Orig_Frame, im_color, CV_BLUR, 15);
    cvSaveImage("lena_blur.bmp",im_color );
 
    cvWaitKey (0);
    /* Es una buena practica liberar todo antes de salir del programa y no
       confiar que windows haga todo el trabajo sucio :) */
    cvReleaseImage( &Orig_Frame );
    cvReleaseImage( &im_color);
    return 0;
}