图像处理系列(C++)—— 形态学

图像处理系列(C++)—— 形态学图像形态学操作 基于形状的一系列图像处理操作的合集 主要是基于集合论基础上的形态学数学 形态学有四个基本操作 腐蚀 膨胀 开 闭

大家好,欢迎来到IT知识分享网。

图像形态学操作 – 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学。

形态学有四个基本操作:腐蚀、膨胀、开、闭。

膨胀:跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状。

腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值

图像处理系列(C++)—— 形态学

src:输入图像;

dst: 输出图像

kernel:结构元素,通过下面接口创建

getStructuringElement(int shape, Size ksize, Point anchor) shape — 形状 (MORPH_RECT \MORPH_CROSS \MORPH_ELLIPSE) - ksize — 大小 anchor — 锚点 默认是Point(-1, -1)意思就是中心像素

开操作:先腐蚀后膨胀。可以去掉小的对象,假设对象是前景色,背景是黑色。

图像处理系列(C++)—— 形态学

闭操作:先膨胀后腐蚀。可以填充小的洞,假设对象是前景色,背景是黑色。

图像处理系列(C++)—— 形态学

形态学梯度:膨胀减去腐蚀。又称为基本梯度(其它还包括-内部梯度、方向梯度)

图像处理系列(C++)—— 形态学

顶帽:是原图像与开操作之间的差值图像。顶帽变换用于凸显暗背景上的亮物体。(也可叫白帽)

图像处理系列(C++)—— 形态学

黑帽:闭操作图像与源图像的差值图像。底帽变换用于凸显亮背景上的暗物体。(也可叫黑帽)

图像处理系列(C++)—— 形态学

上述变换API,统一为

morphologyEx(src, dest, CV_MOP_BLACKHAT, kernel); Mat src – 输入图像 - Mat dest – 输出结果 - int OPT – CV_MOP_OPEN/ CV_MOP_CLOSE/ CV_MOP_GRADIENT / CV_MOP_TOPHAT/ CV_MOP_BLACKHAT 形态学操作类型 Mat kernel 结构元素 int Iteration 迭代次数,默认是1

代码:

#include <opencv2/highgui/highgui_c.h> #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; Mat src, dst; char OUTPUT_WIN[] = "image"; int element_size = 3; int max_size = 21; void CallBack_Demo(int, void*); int main(int argc, char argv) { src = imread("E:/LearningMaterials/opencv_cpp/ConsoleApplication1/a.bmp"); if (!src.data) { printf("could not load image...\n"); return -1; } namedWindow("input image", CV_WINDOW_AUTOSIZE); imshow("input image", src); namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE); createTrackbar("Element Size :", OUTPUT_WIN, &element_size, max_size, CallBack_Demo); CallBack_Demo(0, 0); // 开操作 Mat dstOpen; Mat kerelOpen = getStructuringElement(MORPH_RECT, Size(5,5),Point(-1,-1)); // 定义结构参数大小 morphologyEx(src, dstOpen, CV_MOP_OPEN, kerelOpen); imshow("dstOpen", dstOpen); // 闭操作 Mat dstClose; Mat kerelClose = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1)); // 定义结构参数大小 morphologyEx(src, dstClose, CV_MOP_CLOSE, kerelClose); imshow("dstClose", dstClose); // 顶帽操作 Mat TopHat; Mat kerelTopHat = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1)); // 定义结构参数大小 morphologyEx(src, TopHat, CV_MOP_TOPHAT, kerelTopHat); imshow("TopHat", TopHat); // 黑帽操作 Mat BlackHat; Mat kerelBlackHat = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1)); // 定义结构参数大小 morphologyEx(src, BlackHat, CV_MOP_BLACKHAT, kerelBlackHat); imshow("BlackHat", BlackHat); waitKey(0); return 0; } void CallBack_Demo(int, void*) { int s = element_size * 2 + 1; Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1)); dilate(src, dst, structureElement, Point(-1, -1), 1); // 膨胀 erode(src, dst, structureElement); // 腐蚀 imshow(OUTPUT_WIN, dst); return; }

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/108747.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信