【练习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类型和大小相同,不然报错,可以设置兴趣区域达到此目的

原文地址:https://www.cnblogs.com/tingshuixuan2012/p/4454800.html