- #include <highgui.h>
- #include <cv.h>
- #define THREECHANNELS 3
- #define ONECHANNEL 1
- int main(int argc, char **argv)
- {
- IplImage *doCanny(IplImage*, double, double, double);
- CvCapture *capture;
- if (argc != 2)
- return -1;
- capture = cvCreateFileCapture(argv[1]);
- assert(capture != NULL);
- double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
- IplImage *frame;
- cvNamedWindow("before processed", CV_WINDOW_AUTOSIZE);
- cvNamedWindow("gray", CV_WINDOW_AUTOSIZE);
- cvNamedWindow("canny", CV_WINDOW_AUTOSIZE);
- cvNamedWindow("mix", CV_WINDOW_AUTOSIZE);
- while (1) {
- frame = cvQueryFrame(capture);
- if (!frame) break;
- IplImage *gray = cvCreateImage(cvGetSize(frame), frame->depth, 1);
- cvCvtColor(frame, gray, CV_BGR2GRAY);
- IplImage *canny = doCanny(gray, 10, 100, 3);
- IplImage *mix = cvCreateImage(
- cvSize(3*frame->width, frame->height),
- frame->depth,
- THREECHANNELS
- );
- IplImage *frame_of_mix = cvCreateImageHeader(
- cvSize(frame->width, frame->height),
- frame->depth,
- frame->nChannels
- );
- frame_of_mix->origin = mix->origin;
- frame_of_mix->widthStep = mix->widthStep;
- frame_of_mix->imageData = mix->imageData;
- cvCopy(frame, frame_of_mix);
- cvReleaseImageHeader(&frame_of_mix);
- IplImage *gray_of_mix = cvCreateImageHeader(
- cvSize(gray->width, gray->height),
- gray->depth,
- ONECHANNEL
- );
- gray_of_mix->origin = mix->origin;
- gray_of_mix->widthStep = mix->widthStep;
- gray_of_mix->imageData = mix->imageData +
- frame->width * mix->nChannels;
- cvCopy(gray, gray_of_mix);
- cvReleaseImageHeader(&gray_of_mix);
- IplImage *canny_of_mix = cvCreateImageHeader(
- cvSize(canny->width, canny->height),
- canny->depth,
- ONECHANNEL
- );
- canny_of_mix->origin = mix->origin;
- canny_of_mix->widthStep = mix->widthStep;
- canny_of_mix->imageData = mix->imageData +
- (frame->width + gray->width) * mix->nChannels;
- cvCopy(canny, canny_of_mix);
- cvReleaseImageHeader(&canny_of_mix);
- cvShowImage("before processed", frame);
- cvShowImage("gray", gray);
- cvShowImage("canny", canny);
- cvShowImage("mix", mix);
- char c = cvWaitKey(fps);
- if (c == 27) {
- cvReleaseImage(&gray);
- cvReleaseImage(&canny);
- cvReleaseImage(&mix);
- break;
- }
- }
- cvReleaseCapture(&capture);
- cvReleaseImage(&frame);
- cvDestroyAllWindows();
- return 0;
- }
- IplImage *doCanny(
- IplImage *in,
- double lowThresh,
- double highThresh,
- double aperture
- )
- {
- if (in->nChannels != 1)
- return NULL; // Canny only handles gray scale images
- IplImage *out = cvCreateImage(
- cvSize(in->width, in->height),
- IPL_DEPTH_8U,
- 1
- );
- cvCanny(in, out, lowThresh, highThresh, aperture);
- return out;
- }
- //该片段来自于http://www.codesnippet.cn/detail/120520149522.html
来源: http://www.codesnippet.cn/detail/120520149522.html