第一题:
a:(1)从视频读入数据;(2):将输入数据转成灰度图像 (3):对图像做Canny边缘检测
int main(int argc, const char * argv[]) {
/*1.从视频文件读如数据*/
const char filename[] = "/Users/linwang/LinMovie/Wolf.mp4";
CvCapture * capture = cvCreateFileCapture(filename);
IplImage * frame ;
while(1)
{
frame = cvQueryFrame(capture);
IplImage * Gray_Img = cvCreateImage(cvSize(frame->width, frame->height), frame->depth, 1);
IplImage * Cany_Img = cvCreateImage(cvSize(frame->width, frame->height), frame->depth, 1);
/*注意RGB转GRAY要单通道的才可以*/
cvCvtColor(frame, Gray_Img, CV_RGB2GRAY);
cvCanny(frame, Cany_Img, 10, 100);
cvNamedWindow("Original",0);
cvNamedWindow("Canny_Img",0);
cvNamedWindow("Gray_Img",0);
if(!frame)
{
break;
}
cvShowImage("Original", frame);
cvShowImage("Gray_Img", Gray_Img);
cvShowImage("Canny_Img", Cany_Img);
char c = cvWaitKey(33);
if(c == 27)
{
break;
}
}
cvReleaseCapture(&capture);
cvDestroyWindow("Original");
cvDestroyWindow("Canny_Img");
cvDestroyWindow("Gray_Img");
return 0;
}
三张图像同时显示
b:把三个图像合并到一个上去:
int main(int argc, const char * argv[]) {
/*1.从视频文件读如数据*/
const char filename[] = "/Users/linwang/LinMovie/Wolf.mp4";
CvCapture * capture = cvCreateFileCapture(filename);
IplImage * frame ;
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 1, 1, 0, 2, 8);
while(1)
{
frame = cvQueryFrame(capture);
IplImage * Gray_Img = cvCreateImage(cvSize(frame->width, frame->height), frame->depth, 1);
IplImage * Cany_Img = cvCreateImage(cvSize(frame->width, frame->height), frame->depth, 1);
IplImage * NewBee = cvCreateImage(cvSize(frame->width * 3, frame->height), frame->depth, 3);
/*2、注意RGB转GRAY要单通道的才可以*/
cvCvtColor(frame, Gray_Img, CV_RGB2GRAY);
cvCanny(frame, Cany_Img, 10, 100);
cvZero(NewBee);
/*3、载入原图像加载到目标图像*/
cvSetImageROI(NewBee, cvRect(0, 0, frame->width, frame->height));
cvCopy(frame, NewBee);
cvResetImageROI(NewBee);
/*4、把灰度图像加载到目标图像*/
cvSetImageROI(NewBee, cvRect(frame->width,0,frame->width, frame->height));
NewBee->nChannels = 1;
cvCopy(Gray_Img, NewBee);
cvResetImageROI(NewBee);
/*5、把Canny化的图像加载到目标图像*/
cvSetImageROI(NewBee, cvRect(frame->width * 2, 0, frame->width, frame->height));
NewBee->nChannels = 1;
cvCopy(Cany_Img, NewBee);
cvResetImageROI(NewBee);
if(!frame)
{
break;
}
/*6、缩放*/
double scale = 0.5; //缩放的倍数
CvSize size;
size.width = NewBee->width*scale *scale;
size.height = NewBee->height*scale;
IplImage * dst = cvCreateImage(size, NewBee->depth, NewBee->nChannels);
cvResize(NewBee, dst, CV_INTER_CUBIC);
/*7、设置字体*/
cvPutText(dst, "Original!", cvPoint(100, 50), &font, CV_RGB(255,255,255));
cvPutText(dst, "Gray!", cvPoint(450, 50), &font, CV_RGB(255,255,255));
cvPutText(dst, "Canny!", cvPoint(700, 50), &font, CV_RGB(255,255,255));
cvNamedWindow("NewBee",0);
cvShowImage("NewBee", dst);
char c = cvWaitKey(33);
if(c == 27)
{
break;
}
}
cvReleaseCapture(&capture);
cvDestroyWindow("NewBee");
return 0;
}