【练习5.9】图像掩码、礼帽、cvCopy、图像融合、cvCvtColor

提纲
题目要求
程序代码
结果图片
要言妙道

题目要求:

读入一副风景图,然后将其转化为灰度图像

a、对图像进行形态学“礼帽”操作,并显示结果

b、将结果图像转化为8位的掩码

c、复制灰度值到礼帽块中,显示结果→我的理解是,将第a问与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     IplImage * src1 = cvLoadImage(fileName1, CV_LOAD_IMAGE_UNCHANGED);
22     assert(src1);
23
24     cvNamedWindow("原始图像", 0);
25     cvNamedWindow("题目_a", 0);
26     cvNamedWindow("题目_b", 0);
27     cvNamedWindow("题目_c", 0);
28
29     IplImage * img_Gray = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1);
30
31     //使用cvCvtColor和cvCopy这些函数前,都应该对参数进行验证再使用
32     if (src1->nChannels != 3)
33     {
34         cout << "加载的图像必须为彩色图片" << endl;
35         return 0;
36     }
37
38     cvCvtColor(src1, img_Gray, CV_RGB2GRAY);
39
40     cvShowImage("原始图像", img_Gray);
41
42     //---------------------------a:开始--------------------------------//
43
44
45     IplImage * imgCopy = cvCloneImage(img_Gray);
46     cvZero(imgCopy);
47
48     IplConvKernel * kernel = cvCreateStructuringElementEx(3, 3, 1, 1, CV_SHAPE_RECT);
49     cvMorphologyEx(img_Gray, imgCopy, NULL, kernel, CV_MOP_TOPHAT,6);
50
51     cvShowImage("题目_a", imgCopy);
52
53     //---------------------------a:结束--------------------------------//
54
55     //---------------------------b:开始--------------------------------//
56
57
58     IplImage * imgCopy_b = cvCloneImage(img_Gray);
59     cvZero(imgCopy_b);
60
61     cvThreshold(imgCopy, imgCopy_b, 50, 255, CV_THRESH_BINARY);
62
63     cvShowImage("题目_b", imgCopy_b);
64
65     //---------------------------b:结束--------------------------------//
66
67     //---------------------------c:开始--------------------------------//
68
69
70     IplImage * imgCopy_c = cvCloneImage(imgCopy);
71     //cvZero(imgCopy_c);
72
73     cvCopy(imgCopy_b, imgCopy_c, imgCopy_b);
74
75     cvShowImage("题目_c", imgCopy_c);
76
77     //---------------------------c:结束--------------------------------//
78
79     cvWaitKey(0);
80
81     cvReleaseImage(&src1);
82     cvReleaseImage(&imgCopy);
83     cvReleaseImage(&imgCopy_b);
84     cvReleaseImage(&imgCopy_c);
85
86     cvDestroyWindow("原始图像");
87     cvDestroyWindow("题目_a");
88     cvDestroyWindow("题目_b");
89     cvDestroyWindow("题目_c");
90
91     return 0;
92 }
93   

结果图片:

要言妙道:

①使用cvCvtColor、cvCopy等函数时,注意验证输入图片的有效性,不然会报错,例如:

1     //使用cvCvtColor和cvCopy这些函数前,都应该对参数进行验证再使用
2     if (src1->nChannels != 3)
3     {
4         cout << "加载的图像必须为彩色图片" << endl;
5         return 0;
6     }
7
8     cvCvtColor(src1, img_Gray, CV_RGB2GRAY);

②制作掩码图像其实就是二值化图像

③可以使用cvCopy进行图像融合,利用上第三个参数

④礼帽和黑帽:这些操作分别用于分离比邻近的点亮或暗的一些斑块。所以,可用于实现类似Cognex的CogBlobTool功能,OpenCV中有类似描述Blob的结果:CvConnectedComponent

时间: 2024-07-30 17:11:48

【练习5.9】图像掩码、礼帽、cvCopy、图像融合、cvCvtColor的相关文章

【练习4.1】图像转换、Canny检测、图像合并、在图像上输出文字

2014-07-17 第四章 细说HighGUI 练习题第1题 题目大致要求: a:(1)从视频文件读入数据,(2)转换为灰度图,(3)做Canny边缘检测,显示在三个窗口 b:将a的三个视频显示在一个窗口中 c:在b步骤的不同部分写上合适的文字标签 代码: 1 #include "stdafx.h" 2 #include <windows.system.h> 3 #include <iostream> 4 #include <cv.h> 5 #in

Android资源之图像资源(状态图像资源)

在上一篇博文中.我主要解说了XML图像资源中的图层资源,在此图像资源博文中我会给大家陆续解说XMl图像资源的图像状态资源.图像级别资源.淡入淡出资源.嵌入图像资源.剪切图像资源和外形资源. 1.图像状态资源: Android SDK提供的Button控件默认样式显得有些单调.并且这样的样式与炫丽的界面搭配在一起极不协调.当然.我们能够使用ImageView或ImgaeButton控件配合不同状态的图像做出非常酷的button,这里我给出用java代码实现button按下与正常状态的特效: btn

h.264参考图像列表、解码图像缓存

1.参考图像列表(reference picture list) 一般来说,h.264会把需要编码的图像分为三种类型:I.P.B,其中的B.P类型的图像由于采用了帧间编码的这种编码方式,而帧间编码又是以参考图像为基础进行的,因此需要有个参考图像列表来管理之前生成的参考图像,方便用于对当前图像进行编码. 2.解码图像缓存(decoded picture buffer) 随着图像编码的进行,(解码阶段)会不断有新的图像生成(重建图像),已解码图像会被放到解码图像缓存区中(或直接输出,这个在下面DPB

低清图像变成高清图像 原理

http://www.360doc.com/content/14/0320/21/14106735_362271247.shtml# 光流(optical flow) 光流法(optical flow method) 光流场...:http://www.360doc.com/content/11/0219/10/3873911_94254170.shtml 自适应背景更新方法研究:分方法对视频图像进行运动目标分割时,只有及时的更新背景图像才能更加精确.背景更新技术的涌现,使得以图像差分方法分割视

选择图像根据坐标得到图像。头像裁剪器

选择图像根据坐标得到图像. 环境 Visual Studio 2019,dotNet Framework 4.0 SDK 支持Windows XP,Windows Win7.8.10 项目地址 效果 原文地址:https://www.cnblogs.com/yanjinhua/p/11328880.html

图像掩码工具

此工具用于绘制图像的掩膜 mask,可对文件夹内图片进行涂鸦选取掩膜. 功能:支持多图像文件的提取:支持画笔大小.颜色设置.透明度:支持擦除和清除:等等. 原文地址:https://www.cnblogs.com/wang_xy/p/11171044.html

学习笔记TF015:加载图像、图像格式、图像操作、颜色

TensorFlow支持JPG.PNG图像格式,RGB.RGBA颜色空间.图像用与图像尺寸相同(height*width*chnanel)张量表示.通道表示为包含每个通道颜色数量标量秩1张量.图像所有像素存在磁盘文件,需要被加载到内存. 图像加载与二进制文件相同.图像需要解码.输入生成器(tf.train.string_input_producer)找到所需文件,加载到队列.tf.WholeFileReader加载完整图像文件到内存,WholeFileReader.read读取图像,tf.ima

[图像]用Matlab在图像上画矩形框

原创文章,欢迎转载.转载请注明:转载自 祥的博客 原文链接:http://blog.csdn.net/humanking7/article/details/46819527 在毕业设计的时候写论文画图,要在一个图像上精确的标记出要处理的区域,用Photoshop或是其他绘图软件难免不精确,而且也不符合懒人思维(以后怎么办,要一劳永逸,嘿嘿),所以就自己写软件吧. 编程思想和注意事项 其实程序的思路很简单,就是在局域外面像素的值(颜色)覆盖掉就行了,但是要注意几点内容. 原图像通道问题(边框颜色问

获取TBitMap图像缓冲区,提高图像处理速度

使用Dephi进行图像处理可以有多种方法,最常用的应该算是TBitmap,它提供方便的图像存取能力,结合Canvas可进行画线.画圆.图像拷贝等操作.不过在进行大量的图像处理操作时,为了获得更高的速度,我们希望能够直接对图像缓冲区进行读写.查阅Dephi的帮助手册没有发现直接取得整个图像缓冲区的功能,但提供的ScanLine属性可以取得指定行图像数据的指针,比较接近我们的要求,先看看ScanLine的描述: Provides indexed access to each line of pixe