opencv学习(五)书本《学习Opencv》(中文版)第四章的作业答案第一题(opencv3.0.0+VS2012+win7)
2015-08-05 11:46
375 查看
需要注意的问题:
1.文字标签必须在显示图像之前放上去
2.如何将几个图粘起来,origin和widthstep的用法
3.如何显示文字
源码:
1.文字标签必须在显示图像之前放上去
2.如何将几个图粘起来,origin和widthstep的用法
3.如何显示文字
源码:
#include "cv.h" #include "highgui.h" int main(int argc, char** argv) { CvCapture* capture = cvCreateFileCapture(argv[1]); 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);//变为灰度,1代表垂直旋转 cvShowImage("gray",gray); //做canny运算 if (gray->nChannels != 1) { break; } cvCanny(gray,cannyImage,100,150,3);//下限阈值,上限阈值,中孔=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); //imageData包含一个指向第一行图像数据的指针 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); CvFont font = cvFont(10.0,1); cvInitFont(&font,CV_FONT_HERSHEY_SCRIPT_SIMPLEX,0.5f,0.5f); //void cvInitFont(CvFont* font,int font_face, //double hscale全高或半高1或0.5,double vscale,double shear斜体0不斜 = 0, //int thickness = 1,int line_type = 8); cvPutText(totle,"Frame",cvPoint(size.width/2,size.height/2),&font,cvScalar(0,0,255)); //void cvPutText(CvArr* img,const char* text, //CvPoint origin文本框左下角位置,const CvFont* font,CvScalar color); cvPutText(totle,"Frame_gray",cvPoint(size.width/2*3,size.height/2),&font,cvScalar(0,0,255)); cvPutText(totle,"Frame_canny",cvPoint(size.width/2*5,size.height/2),&font,cvScalar(0,0,255)); cvShowImage("totle",totle);//最后再显示 char c = cvWaitKey(33); if (c == 27) { break; } } cvReleaseCapture(&capture); cvReleaseImage(&gray); cvReleaseImage(&cannyImage); cvReleaseImage(&totle); cvReleaseImage(&gray3); cvReleaseImage(&cannyImage3); cvDestroyAllWindows(); return 0; }
相关文章推荐
- Apache与Nginx优缺点比较
- bash fifo管道使用测试例子
- Mac安装OpenCV下载ippicv_macosx_20141027.tgz失败解决方案
- linux下支持laravel和apache的php源码编译
- uwsgi部署到nginx出现invalid request block size: 4161 (max 4096)...skip问题
- Photoshop CS6学习地址
- 在Linux和Windows系统上安装Nginx服务器的教程
- TravelCMS旅游网站系统前台诞生记-2(后台框架篇)
- TravelCMS旅游网站系统前台诞生记-2(后台框架篇)
- Maven依赖的Scope去除部署不需要的jar 包
- Tomcat 性能监控及调优
- uC/OS-II内核架构解析(1)---嵌入式RTOS(转)
- nginx源码编辑带第三方模块lua
- Nginx--Windows环境下Nginx+tomcat配置(包括动静分离)
- linux mysql 常用命令
- 十年嵌入式arm-linux总结
- openwrt ndsctl工具
- Bash shell script 取到文件中每一行(Just for record)
- hdu 5348 MZL's endless loop(欧拉路径+欧拉环)
- linux sort 用法