opencv学习记录之形态学操作

腐蚀和膨胀是形态学运算的基础,将腐蚀和膨胀进行组合运算,通过不同的组合可以实现不同的效果,需要自行开发则可以实现开运算,闭运算,形态学梯度运算,礼帽运算

黑帽运算,击中击不中运算等不同形式的运算

函数形式

dst = cv2.morphologyEx( src , op , kernel [ , anchor [ , interations [, borderType [ , borderValue]]]])

dst 形态学操作之后的图像,与原图像类型大小相同

src需要操作的图像,与之腐蚀和膨胀操作一样要求深度

op代表操作类型

类型 说明 含义 操作
cv2.MORPH_ERODE 腐蚀 腐蚀 erode(src)
cv2.MORPH_DILATE 膨胀 膨胀 dilate(src)
cv2.MORPH_OPEN 开运算 先腐蚀后膨胀 dilate(erode(src))
cv2.MORPH_CLOSE 闭运算 先膨胀后腐蚀 erode(dilate(src))
cv2.MORPH_GRADIENT 形态学梯度运算 膨胀图减腐蚀图 dilate(src)-erode(src)
cv2.MORPH_TOPHAT 顶帽运算 原始图像减开运算所得图像 src - open(src)
cv2.MORPH_BLACKHAT 黑帽运算 闭运算所得图像减原始图像 close(src) - src
cv2.MORPH_HITMISS 击中击不中 前景背景腐蚀运算的交集。仅仅支持CV_8UC1 二进制图像 intersection(erode(src) , erode(src1))

kernel  anchor  interations  borderType  borderValue与cv2.erode()参数含义一致

开运算

将图像先腐蚀后膨胀,可以用于去噪、计数等

1 import cv2
2 import numpy as np
3 img = cv2.imread("opening.bmp")
4 k = np.ones((10,10) , np.uint8)
5 r = cv2.morphologyEx(img , cv2.MORPH_OPEN , k)
6 cv2.imshow("img" , img)
7 cv2.imshow("result" , r)
8 cv2.waitKey()
9 cv2.destroyAllWindows()

原图

效果图

闭运算

先膨胀后腐蚀, 有助于关闭前景体内的小孔, 或者除去物体上的小黑点, 还可以用于不同前景图像进行连接

1 import cv2
2 import numpy as np
3 img = cv2.imread("closing.bmp")
4 k = np.ones((10,10) , np.uint8)
5 r = cv2.morphologyEx( img , cv2.MORPH_CLOSE , k , iterations = 3)
6 cv2.imshow("img" , img)
7 cv2.imshow("result" , r)
8 cv2.waitKey()
9 cv2.destroyAllWindows()

原图

效果图

形态学梯度运算

用图像的膨胀图减去腐蚀图像   可以获取原始图像中前景图像的边缘

1 import cv2
2 import numpy as np
3 img = cv2.imread("gradient.bmp" , cv2.IMREAD_UNCHANGED)
4 k = np.ones((5,5) , np.uint8)
5 r = cv2.morphologyEx(img , cv2.MORPH_GRADIENT , k)
6 cv2.imshow("img" , img)
7 cv2.imshow("result" , r)
8 cv2.waitKey()
9 cv2.destroyAllWindows()

原图

效果图

顶帽运算

用原始图像减去其开运算图像的操作   该操作可以获取图像的噪声信息, 或者得到比原始图像的边缘更亮的边缘信息

1 import cv2
2 import numpy as np
3 img = cv2.imread("tophat.bmp" , cv2.IMREAD_UNCHANGED)
4 k = np.ones((5,5) , np.uint8)
5 r = cv2.morphologyEx(img , cv2.MORPH_TOPHAT , k)
6 cv2.imshow("img", img)
7 cv2.imshow("result" , r)
8 cv2.waitKey()
9 cv2.destroyAllWindows()

原图

效果图

黑帽运算

是用闭运算图像减去原始图像的操作, 黑猫运算能够获取图像内壁的小孔,或前景色中的小黑点, 或者得到比原始图像的边缘

更暗的边缘部分

1 import cv2
2 import numpy as np
3 img = cv2.imread("blackhat.bmp" , cv2.IMREAD_UNCHANGED)
4 k = np.ones((5,5) , np.uint8)
5 r = cv2.morphologyEx(img , cv2.MORPH_BLACKHAT , k)
6 cv2.imshow("img" , img)
7 cv2.imshow("result" , r)
8 cv2.waitKey()
9 cv2.destroyAllWindows()

原图

效果图

原文地址:https://www.cnblogs.com/miaorn/p/12288909.html

时间: 2024-08-29 18:03:49

opencv学习记录之形态学操作的相关文章

Linux学习记录--文件IO操作相关系统编程

文件IO操作相关系统编程 这里主要说两套IO操作接口,分别是: POSIX标准 read|write接口,函数定义在#include<unistd.h> ISO C标准 fread|fwrite接口,函数定义在#include<stdio.h> 有书上说POSIX标准与ISO C标准的区别在于文件读写是否带缓冲区,我则不是很认同,因此POSIX标准下的IO操作也是带缓冲区的,至于这两个标准下的IO性能谁更加好则不一定,因为这和缓冲区的大小,以及用户逻辑有很大关系. POSIX标准

【OpenCV学习笔记】一.操作像素

近来给自己开个新坑,打算学习下OpenCV这一计算机视觉库. 参考资料:<OpenCV 2 计算机视觉 编程手册> [以下内容默认版本OpenCV 2.3.1] 最简单的操作莫过于对于一张图片上的像素的遍历了,然而,遍历的方式有很多种,如何取舍很是关键. 简单介绍几种常见的方式: 1.指针遍历: int row = image.rows; int col = image.cols * image.channels(); for(int i = 0; i < row; i++) { uch

[学习记录]NLTK常见操作一(去网页标记,统计词频,去停用词)

NLTK是python环境中的一个非常流行的NLP库,这篇记录主要记录NLTK的一些常见操作 1.去除网页html标记 我们常常通过爬虫获取网页信息,然后需要去除网页的html标签.为此我们可以这么做: 2.统计词频 这里使用的tokens就是上面图中的tokens 3.去除停用词 停用词就是类似the,a,of这种语义无价值的词,取出后我们还可以把统计图画出来 4.绘制词云图 对于词云图的使用原理还不太清楚,只是找了一个可运行的公式 原文地址:https://www.cnblogs.com/t

jquery学习记录四(操作DOM元素)

jQuery 操作DOM元素主要有: 1.使用attr()方法控制元素的属性 2.操作元素的内容 3.操作元素的样式 4.移除属性和样式 5.使用append()方法向元素内追加内容 6.使用appendTo()方法向被选元素内容插入内容 7.使用before()和after()在元素前后插入内容 8.使用clone()方法复制元素 9.替换内容 10.使用wrap()和wrapinner()方法包裹元素和内容 11.使用each()方法遍历元素 12.使用remove()和empty()方法删

opencv学习记录之图像运算

图像的运算可以是十进制的值运算也可以是二进制的位逻辑运算 一.图像加法运算 1 import cv2 2 import numpy as np 3 img1 = np.random.randint(0,256, size = [3,3] , dtype = np.uint8) 4 img2 = np.random.randint(0,256, size = [3,3] , dtype = np.uint8) 5 img3 = cv2.add(img1,img2) 6 print("img1 =\

opencv学习记录之几何变换

------------恢复内容开始------------ 几何变换是指将一幅图像映射到另外一幅图像内的操作 一.缩放 函数具体形式为 dst = cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) dst代表输出的目标图像,类型与src相同,大小为dsize 或可以通过src.size() ,fx,fy计算得到 src代表需要缩放的原始图像 dsize代表输出图像大小 fx表示水平方向的缩放比例 fy表示垂直方向的缩放比例 i

【opencv学习记录】以迭代器方式访问图像像素,统计像素信息存入文件

opencv2.4.9,练习使用图像迭代器访问像素值+STL中的vector #include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include <opencv2\imgproc\imgproc.hpp> #include <iostream> #include <fstream> using namespace std; using namespace

opencv学习记录

1 #include<iostream> 2 #include <opencv2/core/core.hpp> 3 #include <opencv2/highgui/highgui.hpp> 4 using namespace cv; 1 Mat img4 = imread("LinuxLogo.jpg"); 2 // 创建画"窗口 3 namedWindow("4"); 4 // 在窗口中显示游戏原画 5 imsho

opencv学习记录之阈值处理

阈值处理是指将图像内高于一定值或者低于一定值的像素点进行处理 函数形式为: retval ,dst = cv2.thresshold( src , thresh , maxval , type ) retval代表返回的阈值 dst代表阈值分割结果图像,与原始图像有相同的大小和类型 src代表要进行分割的图像,可以是多通道的 thresh代表要设定的阈值 maxval代表当type为THRESH_BINARY或者THRESH_BINARY_INV类型时,需要设定的最大值 type代表阈值分割的类