学习OpenCV第四章第一题答案
2014-08-18 15:14
148 查看
本题用两种方法实现,代码如下:
// learningOpencv_7.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "cv.h" #include "highgui.h" int main(int argc, char** argv) { CvCapture* capture = cvCreateFileCapture("E:\\数字信号处理\\1离散时间信号与系统.flv"); 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); gray->origin=1; cvShowImage("gray",gray); //做canny运算 //canny只能处理单通道图像 if (gray->nChannels != 1) { break; } cvCanny(gray,cannyImage,100,150,3); //printf("cannyImage.origin:%d\n",cannyImage->origin); cannyImage->origin=1; cvShowImage("canny",cannyImage); cvCvtColor(cannyImage,cannyImage3,CV_GRAY2BGR); cvCvtColor(gray,gray3,CV_GRAY2BGR); #if 0 IplImage* img1 = cvCreateImageHeader(size,frame->depth,3); IplImage* img2 = cvCreateImageHeader(size,frame->depth,3); IplImage* img3 = cvCreateImageHeader(size,frame->depth,3); img1->origin = 1; img1->widthStep = totle->widthStep;//这里注意,因为img1要成为在大图中的一部分,所以是大图每行字节长 img2->origin =1; img2->widthStep = totle->widthStep; img3->origin = 1; 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)); #endif #if 1 for(int i=0;i<totle->height;i++) { for(int j=0;j<totle->width;j++) { if(j<totle->width/3) { char *p1; p1=totle->imageData+i*totle->widthStep+j*3; char *p2; p2=frame->imageData+i*frame->widthStep+j*3; *p1=*p2; *(p1+1)=*(p2+1); *(p1+2)=*(p2+2); } else if(j>=(totle->width/3)*2) { char *p1; p1=totle->imageData+i*totle->widthStep+j*3; char *p2; p2=cannyImage3->imageData+i*cannyImage3->widthStep+j*3; *p1=*p2; *(p1+1)=*(p2+1); *(p1+2)=*(p2+2); } else { char *p1; p1=totle->imageData+i*totle->widthStep+j*3; char *p2; p2=gray3->imageData+i*gray3->widthStep+j*3; *p1=*p2; *(p1+1)=*(p2+1); *(p1+2)=*(p2+2); } } } cvShowImage("totle",totle); CvFont font = cvFont(20.0,3); cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX,0.5f,0.5f,2,1); cvPutText(totle,"Frame",cvPoint(10,200),&font,cvScalar(255,0,0)); cvPutText(totle,"Frame_gray",cvPoint(10+size.width,200),&font,cvScalar(0,255,0)); cvPutText(totle,"Frame_canny",cvPoint(10+size.width*2,200),&font,cvScalar(0,0,255)); cvShowImage("totle",totle); #endif char c = cvWaitKey(33); if (c == 27) { break; } } cvReleaseCapture(&capture); cvReleaseImage(&gray); cvReleaseImage(&cannyImage); cvReleaseImage(&totle); cvReleaseImage(&gray3); cvReleaseImage(&cannyImage3); cvDestroyAllWindows(); return 1; }
相关文章推荐
- 学习OpenCV第四章第二题答案
- 学习OpenCV第四章第四题答案
- 学习openCV第四章答案
- 学习opencv 习题答案-第三章
- opencv学习(六)书本《学习Opencv》(中文版)第四章的作业答案第二题(opencv3.0.0+VS2012+win7)
- opencv学习(五)书本《学习Opencv》(中文版)第四章的作业答案第一题(opencv3.0.0+VS2012+win7)
- 学习OpenCV第四章第五题答案
- 学习opencv课后答案第三章
- 学习opencv第三章答案
- 学习opencv 第二章 习题5答案
- 学习opencv 习题答案-第四章
- 学习opencv 4.1答案
- OpenCV学习——图像信息读取和倒置
- sizeof ( )——在学习openCV中 create matrix 时发现的问题
- OpenCV学习之直方图统计应用【转】
- OpenCV学习——边缘检测
- OpenCV学习——矩阵基本操作
- C++学习之2--10.09题目答案
- OpenCV学习——基本数据结构
- 关于嵌入式的和我同档次人学习方向提问的答案