第一题:
#include "cv.h"
#include "highgui.h"
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")
int main(int argc, char** argv)
{
CvCapture* capture = cvCreateFileCapture("11.avi");
cvNamedWindow("origin",CV_WINDOW_AUTOSIZE);
cvNamedWindow("gray",CV_WINDOW_AUTOSIZE);
cvNamedWindow("canny",CV_WINDOW_AUTOSIZE);
cvNamedWindow("totle", CV_WINDOW_AUTOSIZE);
CvSize size = cvSize((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));
IplImage* gray = cvCreateImage(size,IPL_DEPTH_8U,1);
IplImage* gray3 = cvCreateImage(size,IPL_DEPTH_8U,3);//三通道灰度图像
IplImage* cannyImage = cvCreateImage(size,IPL_DEPTH_8U,1);
IplImage* cannyImage3 = cvCreateImage(size,IPL_DEPTH_8U,3);//三通道canny图像
//size.width = size.width*3;
IplImage* totle = cvCreateImage(cvSize(size.width*3,size.height),IPL_DEPTH_8U, 3);
cvZero(totle);
while (1)
{
IplImage* frame = cvQueryFrame(capture);
if (!frame)
{
return -1;
}
cvShowImage("origin",frame);
cvConvertImage(frame,gray,1);
cvShowImage("gray",gray);
//做canny运算
if (gray->nChannels != 1)
{
break;
}
cvCanny(gray,cannyImage,100,150,3);
cvShowImage("canny",cannyImage);
IplImage* img1 = cvCreateImageHeader(size,frame->depth,3);
IplImage* img2 = cvCreateImageHeader(size,frame->depth,3);
IplImage* img3 = cvCreateImageHeader(size,frame->depth,3);
img1->origin = frame->origin;
img1->widthStep = totle->widthStep;//这里注意,因为img1要成为在大图中的一部分,所以是大图每行字节长
img2->origin = frame->origin;
img2->widthStep = totle->widthStep;
img3->origin = frame->origin;
img3->widthStep = totle->widthStep;
cvCvtColor(gray,gray3,CV_GRAY2BGR);
cvCvtColor(cannyImage,cannyImage3,CV_GRAY2BGR);
img1->imageData = totle->imageData; //第一个指向大图的开始处,即第一行
cvCopy(frame,img1);
img2->imageData = totle->imageData + frame->widthStep;//这里很关键,注意字节排列问题,所以不能用width
cvCopy(gray3,img2);
img3->imageData = totle->imageData + 2*frame->widthStep;
cvCopy(cannyImage3,img3);
cvShowImage("totle",totle);
CvFont font = cvFont(10.0,1);
cvInitFont(&font,CV_FONT_HERSHEY_SCRIPT_SIMPLEX,0.5f,0.5f,0,1);
cvPutText(totle,"Frame",cvPoint(10,200),&font,cvScalar(0,0,255));
cvPutText(totle,"Frame_gray",cvPoint(10+size.width,200),&font,cvScalar(0,0,255));
cvPutText(totle,"Frame_canny",cvPoint(10+size.width*2,200),&font,cvScalar(0,0,255));
char c = cvWaitKey(33);
if (c == 27)
{
break;
}
}
cvReleaseCapture(&capture);
cvReleaseImage(&gray);
//cvReleaseImage(&gray);
cvReleaseImage(&cannyImage);
cvReleaseImage(&totle);
cvReleaseImage(&gray3);
cvReleaseImage(&cannyImage3);
cvDestroyAllWindows();
return 1;
}#include "cv.h"
#include "highgui.h"