【练习5.7】cvCopy、阈值化、掩码图像、ROI、COI
题目要求 |
程序代码 |
结果图片 |
要言妙道 |
使用练习6生成的掩码。载入一张外景图,然后在cvCopy中使用这个掩码:
a、复制外景图到一张新图中,只复制掩码中值不等于0的部分。
b、将鼠标图像复制到外景图像中。
1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点。 2 // 3 //D:\\Work\\Work_Programming\\Source\\Image\\lena.jpg 4 5 6 #include "stdafx.h" 7 #include <cv.h> 8 #include <highgui.h> 9 #include <iostream> 10 using namespace cv; 11 using namespace std; 12 13 //函数声明-->--->-->--->-->--->-->--->// 14 15 //<--<--<--<--<--<--<--<--<--函数声明// 16 17 18 int _tmain(int argc, _TCHAR* argv[]) 19 { 20 const char * fileName1 = "D:\\Work\\Work_Programming\\Source\\Image\\OpenCVExerciseImage\\第5章\\风景.jpg"; 21 const char * fileMask = "D:\\Work\\Work_Programming\\Source\\Image\\OpenCVExerciseImage\\第5章\\ExerciseResult_5-6.PNG"; 22 IplImage * src1 = cvLoadImage(fileName1, CV_LOAD_IMAGE_GRAYSCALE); 23 IplImage * imgMask = cvLoadImage(fileMask, CV_LOAD_IMAGE_GRAYSCALE); 24 assert(src1); 25 assert(imgMask); 26 27 cvNamedWindow("原始图像", 0); 28 cvNamedWindow("题目_a", 0); 29 cvNamedWindow("题目_b", 0); 30 31 cvShowImage("原始图像", src1); 32 33 //---------------------------a:开始--------------------------------// 34 cvThreshold(imgMask, imgMask, 100, 255, CV_THRESH_BINARY); 35 36 37 IplImage * imgCopy = cvCloneImage(src1); 38 cvZero(imgCopy); 39 40 //必须设置兴趣区域,保证输入图像、输出图像、掩码图像ROI、COI类型和大小相同,不然报错 41 CvRect rect = cvRect(0, 0, imgMask->width, imgMask->height); 42 cvSetImageROI(src1, rect); 43 cvSetImageROI(imgCopy, rect); 44 45 cvCopy(src1, imgCopy, imgMask); 46 47 cvResetImageROI(imgCopy); 48 cvResetImageROI(src1); 49 50 cvShowImage("题目_a", imgCopy); 51 52 //---------------------------a:结束--------------------------------// 53 54 //---------------------------b:开始--------------------------------// 55 cvThreshold(imgMask, imgMask, 100, 255, CV_THRESH_BINARY); 56 57 58 IplImage * imgCopy_b = cvCloneImage(src1); 59 60 cvSetImageROI(imgCopy_b, rect); 61 cvCopy(imgMask, imgCopy_b,imgMask); 62 cvResetImageROI(imgCopy_b); 63 64 65 cvShowImage("题目_b", imgCopy_b); 66 67 //---------------------------b:结束--------------------------------// 68 69 cvWaitKey(0); 70 71 cvReleaseImage(&src1); 72 cvReleaseImage(&imgMask); 73 cvReleaseImage(&imgCopy); 74 cvReleaseImage(&imgCopy_b); 75 76 cvDestroyWindow("原始图像"); 77 cvDestroyWindow("题目_a"); 78 cvDestroyWindow("题目_b"); 79 80 return 0; 81 } 82
cvCopy使用注意事项:必须保证输入图像、输出图像、掩码图像ROI、COI类型和大小相同,不然报错,可以设置兴趣区域达到此目的
‖==========钟于原创 乐于分享 宁静致远 毋忆典藏==========‖