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

时间: 2024-08-08 13:58:14

【练习5.7】cvCopy、阈值化、掩码图像、ROI、COI的相关文章

OpenCV阈值化处理

图像的阈值化就是利用图像像素点分布规律,设定阈值进行像素点分割,进而得到图像的二值图像.图像阈值化操作有多种方法,常用方法有经典的OTSU.固定阈值.自适应阈值.双阈值及半阈值化操作.这里对各种阈值化操作进行一个总结. OTSU阈值化 在阈值化处理中,常用的算法就是OTSU.发明人是Nobuyuki Ostu.这种二值化操作阈值的选取非常重要,阈值选取的不合适,可能得到的结果就毫无用处.简单的说,这种算法假设衣服图像由前景色和背景色组成.通过统计学的方法来选取一个阈值,使这个阈值可以将前景色和背

opencv学习之路(13)、图像阈值化

一.图像阈值化简介 二.固定阈值 三.自适应阈值 1 #include<opencv2/opencv.hpp> 2 using namespace cv; 3 4 void main(){ 5 Mat src=imread("E://1.jpg",0);//以灰度模式读入 6 Mat dst; 7 //threshold(src,dst,100,255,CV_THRESH_BINARY); 8 //adaptiveThreshold(src,dst,255,CV_ADAPT

【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理具体解释

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说.主要通过MFC单文档视图实现显示BMP图片点运算处理.包含图像灰度线性变换.灰度非线性变换.图像阈值化处理.图像均衡化处理等知识,并结合前一篇论文灰度直方图进行展示 .同一时候文章比較具体基础,希望该篇文章对你有所帮助,尤其是刚開始学习的人和学习图像处理的学生. [数字图像处理]一.MFC具体解释显示BMP格式图片 [数字图像处理]二.MFC单文档切割窗体显示图片 [数字图像处理]

OpenCV实现图像阈值化

纯粹阅读,请移步OpenCV实现图像阈值化 效果图 源码 KqwOpenCVBlurDemo 阈值化是一种将我们想要在图像中分析的区域分割出来的方法. 我们把每个像素值都与一个预设的阈值做比较,再根据比较的结果调整像素值. 类似这样 Imgproc.threshold(src,src,100,255,Imgproc.THRESH_BINARY); 其中100是阈值,255是最大值(纯白色的值). 常量 名称 常量 二值阈值化 Imgproc.THRESH_BINARY 阈值化到零 Imgproc

openCV—Python(10)—— 图像阈值化处理

一.函数简介 1.threshold-图像简单阈值化处理 函数原型:threshold(src, thresh, maxval, type, dst=None) src:图像矩阵 thresh:阈值 maxVal:像素最大值 type:阈值化类型 2.adaptiveThreshold-图像自适应阈值化处理 函数原型:adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None) sr

opencv2函数学习之threshold:实现图像阈值化

在opencv2中,threshold函数可以进行阈值化操作. double threshold( const Mat& src, Mat& dst, double thresh,double maxVal, int thresholdType ); 参数: src:原图像. dst:结果图像. thresh:当前阈值. maxVal:最大阈值,一般为255. thresholdType:阈值类型,主要有下面几种: enum { THRESH_BINARY=0, THRESH_BINARY

图像阈值化-threshold、adaptivethreshold

在图像处理中阈值化操作,从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体).这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割.opencv的二值化操作函数,如果你是一位经验丰富的专业人员,可以发现阈值化操作有很多小技巧,不只是单单调用二值化操作函数,就完成阈值化操作,往往还是结合形态学处理. 阈值化操作在图像处理中是一种常用的算法,比如图像的二值化就是一种最常见的一种阈值化操作.opencv2和opencv3中提供了直接阈值化操作

【练习6.1】阈值化、腐蚀、cvFilter2D及自定义滤波器

提纲 题目要求 程序代码 结果图片 要言妙道 题目要求: 用cvFilter2D创建一个滤波器,只检测一副图像里的60度角的直线.将结果显示.做一下分部步操作: a.自定义卷积核,使用cvFilter2D,处理图像 b.对a的结果图片阈值化,是60度上的直线更清晰 c.对b的结果腐蚀 备注: 对于这道题,我的理解是,只保留一副图片60度角上的直线,是为了增加对自定义滤波器的熟悉度 在Opencv卷积滤波cvFilter2D一文中有更多常用的滤波器模板可以借鉴 程序代码: 1 // OpenCVE

【练习5.6】漫水填充法、阈值化、cvSaveImage保存格式

提纲 题目要求 程序代码 结果图片 题目要求: 从噪声图像中创建一个清晰的掩码.完成练习5后,保留图形中最大的图形区域.在图像的左上角设置一个指针,然后让他遍历图像.当你发现像素值为255的时候,存储其位置,然后对其漫水填充,新颜色值为100,.读出漫水填充法返回的连续区域,记录下其面积.如果图像中有另一个较大的区域,那么用0值对这个相对较小的区域进行颜色填充,然后删除已记录的面积.如果新的区域大于之前的区域,那么以0值填充之前的区域并删除他的位置.最后以颜色值255填充剩余的最大区域,显示结果