学习opencv 习题答案-第五章
来源:互联网 发布:淘宝卖干果有什么要求 编辑:程序博客网 时间:2024/04/29 16:54
/* 5_5 我放置了一包烟 */ #include "stdafx.h"#include "cv.h"#include "highgui.h"#include "stdio.h"using namespace std;int main(int argc, char **argv){IplImage * m_image1 = cvLoadImage(argv[1],CV_LOAD_IMAGE_GRAYSCALE|CV_LOAD_IMAGE_ANYCOLOR|CV_LOAD_IMAGE_ANYDEPTH);IplImage * m_image2 = cvLoadImage(argv[2],CV_LOAD_IMAGE_GRAYSCALE|CV_LOAD_IMAGE_ANYCOLOR|CV_LOAD_IMAGE_ANYDEPTH);IplImage *Sub=cvCreateImage(cvGetSize(m_image1),m_image1->depth,m_image1->nChannels); IplImage *Sub_Smooth =cvCreateImage(cvGetSize(m_image1),m_image1->depth,m_image1->nChannels);IplImage *S_Open =cvCreateImage(cvGetSize(m_image1),m_image1->depth,m_image1->nChannels);cvAbsDiff(m_image1,m_image2,Sub); cvThreshold(Sub,Sub_Smooth,140.0,255,CV_THRESH_BINARY);cvMorphologyEx(Sub_Smooth,S_Open,NULL,NULL,CV_MOP_OPEN);cvNamedWindow("Sub_Smooth");cvNamedWindow("Sub_Open");cvShowImage("Sub_Smooth",Sub_Smooth);cvShowImage("Sub_Open",S_Open); cvWaitKey(0);cvReleaseImage(&m_image1);cvReleaseImage(&m_image2);cvReleaseImage(&Sub);cvDestroyWindow("Sub_Smooth");cvDestroyWindow("Sub_Open");return 0;}
/* 5_6 */#include "stdafx.h"#include "cv.h"#include "highgui.h"#include "stdio.h"#include <iostream>#include "math.h"using namespace std;int main(int argc, char **argv){IplImage * m_image1 = cvLoadImage(argv[1],CV_LOAD_IMAGE_GRAYSCALE);IplImage * m_image2 = cvLoadImage(argv[2],CV_LOAD_IMAGE_GRAYSCALE);IplImage *Sub=cvCreateImage(cvGetSize(m_image1),m_image1->depth,m_image1->nChannels); IplImage *Pit_Binary =cvCreateImage(cvGetSize(m_image1),m_image1->depth,m_image1->nChannels);IplImage *Pit_Open =cvCreateImage(cvGetSize(m_image1),m_image1->depth,m_image1->nChannels);cvAbsDiff(m_image1,m_image2,Sub); cvThreshold(Sub,Pit_Binary,10.0,255,CV_THRESH_BINARY);cvMorphologyEx(Pit_Binary,Pit_Open,NULL,NULL,CV_MOP_OPEN);cvNamedWindow("Binary");cvNamedWindow("Photo_Open");CvConnectedComp m_ConnetComp={0}; //保存填充属性 uchar * ptr = cvPtr2D(Pit_Open,0,0,NULL); CvPoint m_point = cvPoint(0,0); //保存填充的种子点 double m_area=0.0; //记录填充的区域面积for (int i =0; i <Pit_Open->height ;i++){ for (int j=0 ;j <Pit_Open->width ;j++) { ptr =cvPtr2D(Pit_Open,0,0,NULL)+ i*(Pit_Open->widthStep)+j; if ((int)(*ptr) == 255) { cvFloodFill(Pit_Open,cvPoint(j,i),cvScalar(100),cvScalarAll(0),cvScalarAll(0),&m_ConnetComp,(8|0<<8),NULL); if (m_ConnetComp.area > m_area) { cvFloodFill(Pit_Open,cvPoint(m_point.x,m_point.y),cvScalar(0,0,0),cvScalarAll(0),cvScalarAll(0),NULL,(8|0<<8),NULL); //把之前的填充区域的清除 m_point.x =j; m_point.y =i; m_area = m_ConnetComp.area; } else { cvFloodFill(Pit_Open,cvPoint(j,i),cvScalar(0,0,0),cvScalarAll(0),cvScalarAll(0),NULL,(8|0<<8),NULL); //清除此次填充 } } }} cout <<m_area; //输出最大的填充面积
cvShowImage("Binary",Pit_Binary);cvShowImage("Photo_Open",Pit_Open);cvWaitKey(0);cvReleaseImage(&m_image1);cvReleaseImage(&m_image2);cvReleaseImage(&Sub);cvDestroyWindow("Binary");cvDestroyWindow("Photo_Open");return 0;}
/* 5_7 */#include "stdafx.h"#include "cv.h"#include "highgui.h"#include "stdio.h"#include <iostream>#include "math.h"using namespace std;int main(int argc, char **argv){IplImage * m_image1 = cvLoadImage(argv[1],CV_LOAD_IMAGE_GRAYSCALE);IplImage * m_image2 = cvLoadImage(argv[2],CV_LOAD_IMAGE_GRAYSCALE);IplImage *Sub=cvCreateImage(cvGetSize(m_image1),m_image1->depth,m_image1->nChannels);IplImage *Pit_Binary =cvCreateImage(cvGetSize(m_image1),m_image1->depth,m_image1->nChannels);IplImage *Pit_Open =cvCreateImage(cvGetSize(m_image1),m_image1->depth,m_image1->nChannels);cvAbsDiff(m_image1,m_image2,Sub); cvThreshold(Sub,Pit_Binary,10.0,255,CV_THRESH_BINARY);cvMorphologyEx(Pit_Binary,Pit_Open,NULL,NULL,CV_MOP_OPEN);cvNamedWindow("Binary");cvNamedWindow("Photo_Open");CvConnectedComp m_ConnetComp={0}; //保存填充属性uchar * ptr = cvPtr2D(Pit_Open,0,0,NULL);CvPoint m_point = cvPoint(0,0); //保存填充的种子点double m_area=0.0; //记录填充的区域面积for (int i =0; i <Pit_Open->height ;i++){for (int j=0 ;j <Pit_Open->width ;j++){ptr =cvPtr2D(Pit_Open,0,0,NULL)+ i*(Pit_Open->widthStep)+j;if ((int)(*ptr) == 255){cvFloodFill(Pit_Open,cvPoint(j,i),cvScalar(100),cvScalarAll(0),cvScalarAll(0),&m_ConnetComp,(8|0<<8),NULL); if (m_ConnetComp.area > m_area){cvFloodFill(Pit_Open,cvPoint(m_point.x,m_point.y),cvScalar(0,0,0),cvScalarAll(0),cvScalarAll(0),NULL,(8|0<<8),NULL); //把之前的填充区域的清除m_point.x =j; m_point.y =i;m_area = m_ConnetComp.area;}else { cvFloodFill(Pit_Open,cvPoint(j,i),cvScalar(0,0,0),cvScalarAll(0),cvScalarAll(0),NULL,(8|0<<8),NULL); //清除此次填充 }}}}cout <<m_area;IplImage *pic_mix =cvLoadImage(argv[3]); //载入没有香烟的图像cvShowImage("sdf",pic_mix);IplImage *pic_src =cvLoadImage(argv[1]); //载入带有香烟的图像cvCopy(pic_src,pic_mix,Pit_Open); cvNamedWindow("Result");cvShowImage("Result",pic_mix);cvShowImage("Binary",Pit_Binary);cvShowImage("Photo_Open",Pit_Open);cvWaitKey(0);cvReleaseImage(&pic_mix);cvReleaseImage(&pic_src);cvReleaseImage(&m_image1);cvReleaseImage(&m_image2);cvReleaseImage(&Sub);cvDestroyWindow("Result");cvDestroyWindow("Binary");cvDestroyWindow("Photo_Open");return 0;}
</pre><p></p><p><pre name="code" class="cpp">/* 5_9 */#include "stdafx.h"#include "cv.h"#include "highgui.h"#include "stdio.h"#include <iostream>#include "math.h"using namespace std;int main(int argc, char **argv){IplImage * m_image = cvLoadImage(argv[1],CV_LOAD_IMAGE_GRAYSCALE);IplImage *m_image1=cvCloneImage(m_image); cvMorphologyEx(m_image,m_image1,NULL,NULL,CV_MOP_TOPHAT);IplImage *pict_mask = cvCreateImage(cvGetSize(m_image1),IPL_DEPTH_8U,1);cvThreshold(m_image1,pict_mask,30,255,CV_THRESH_BINARY);cvCopy(pict_mask,m_image1,pict_mask);cvShowImage("Picture_RGB",m_image);cvShowImage("Picture_Grey",m_image1);cvShowImage("Mask",pict_mask);cvWaitKey(0);cvDestroyWindow("Picture_RGB");cvDestroyWindow("Picture_Grey");cvReleaseImage(&m_image); cvReleaseImage(&m_image1);cvReleaseImage(&pict_mask);return 0;}
/* 5_10 */#include "stdafx.h"#include "cv.h"#include "highgui.h"#include "stdio.h"#include <iostream>#include "math.h"using namespace std;int main(int argc, char **argv){IplImage * m_image = cvLoadImage(argv[1]);IplImage *m_image1=cvCreateImage(cvSize(m_image->width/2,m_image->height/2),m_image->depth,m_image->nChannels);IplImage *m_image2=cvCreateImage(cvSize(m_image1->width/2,m_image1->height/2),m_image1->depth,m_image1->nChannels);IplImage *m_image3=cvCreateImage(cvSize(m_image2->width/2,m_image2->height/2),m_image2->depth,m_image2->nChannels);IplImage *m_down1=cvCreateImage(cvSize(m_image->width/2,m_image->height/2),m_image->depth,m_image->nChannels);IplImage *m_down2=cvCreateImage(cvSize(m_image1->width/2,m_image1->height/2),m_image1->depth,m_image1->nChannels);IplImage *m_down3=cvCreateImage(cvSize(m_image2->width/2,m_image2->height/2),m_image2->depth,m_image2->nChannels); cvResize(m_image,m_image1);cvResize(m_image1,m_image2);cvResize(m_image2,m_image3); cvPyrDown(m_image,m_down1); cvPyrDown(m_down1,m_down2); cvPyrDown(m_down2,m_down3);cvShowImage("Down3",m_down3);cvShowImage("Picture_RGB",m_image);cvShowImage("Resize3",m_image3);cvWaitKey(0);cvDestroyWindow("Down3");cvDestroyWindow("Picture_RGB");cvDestroyWindow("Resize3");cvReleaseImage(&m_image);cvReleaseImage(&m_image1);cvReleaseImage(&m_image2); cvReleaseImage(&m_image3);cvReleaseImage(&m_down1);cvReleaseImage(&m_down2);cvReleaseImage(&m_down3);return 0;}
0 0
- 学习opencv 习题答案-第五章
- 学习opencv 第二章 习题5答案
- 学习opencv 习题答案-第三章
- 学习opencv 习题答案-第四章
- 学习opencv 习题答案-第六章
- 《学习opencv》第五章课后习题1
- 《学习opencv》第五章课后习题2
- 学习OpenCV第四章第五题答案
- c++ primer(第五版)学习笔记及习题答案代码版(第五章)语句
- c++ primer plus第五章习题答案
- 快学Scala第五章习题答案
- 龙书D3D11章节习题答案(第五章)
- C++Primer 中文版 第五版 第五章课后习题答案
- c++ primer(第五版)学习笔记及习题答案代码版(第二章)
- c++ primer(第五版)学习笔记及习题答案代码版(第四章)表达式
- c++ primer(第五版)学习笔记及习题答案代码版(第六章)函数
- c++ primer(第五版)学习笔记及习题答案代码版(第七章)类
- 谢希仁计算机网络第五版课后习题答案(1~6章)
- lua 开发学习之旅三
- 有关音视频文件解析和提取等一系列问题的帖子集合,持续更新
- 多线程设计到的list深克隆
- 用户需求完胜,网站推广不再有瓶颈
- 二叉排序树
- 学习opencv 习题答案-第五章
- 基于按annotation的hibernate主键生成策略
- MFC打印预览问题(预览坐标与打印的实际坐标问题)
- Android learning
- android环境的搭建
- 第十四周项目一 (二维数组大折腾)
- Spring事务解析
- SQL数据库中让字段自动更新
- 首篇