公司建设网站需要什么,济南网站建设哪里好,健康濮阳门户网站建设,免费做试用的网站1. 形态学2. 常用接口2.1 cvtColor()2.2 图像二值化threshod()自适应阈值二值化adaptiveThreshod() 2.3 腐蚀与膨胀erode()getStructuringElement()dilate() 2.4开、闭、梯度、顶帽、黑帽运算morphologyEx() 1. 形态学
OpenCV形态学是一种基于OpenCV库的数字图像处理技术… 1. 形态学2. 常用接口2.1 cvtColor()2.2 图像二值化threshod()自适应阈值二值化adaptiveThreshod() 2.3 腐蚀与膨胀erode()getStructuringElement()dilate() 2.4开、闭、梯度、顶帽、黑帽运算morphologyEx() 1. 形态学
OpenCV形态学是一种基于OpenCV库的数字图像处理技术主要用于处理图像的形状、结构和空间关系。它包括一系列图像处理工具和算法包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽等。
通过对图像进行形态学操作可以实现一些重要的图像处理任务比如去除噪声、分离图像中的对象、填充图像中的空洞、改变图像的形状、寻找图像中的轮廓等等。在OpenCV中形态学操作通常采用二值图像进行处理它可以通过C或Python编程实现具体的形态学算法
2. 常用接口
在对图片进行相关操作之前我们首先要先将彩色图片转变为灰度图像方便图像的二值化。
2.1 cvtColor() 转换颜色通道的API dst cv2.cvtColor( img , cv2.COLOR_BGR2GRAY) 第二个参数为BGR图像转到灰度图像。 2.2 图像二值化
threshod()
该API能将灰度图像按照设定的阈值将图像二值化。 ret ,dst cv2.threshod( img, thresh, maxVal, type) img图像最好是灰度图。 thresh阈值低于阈值为0高于阈值的部分为maxVal maxVal超过阈值的替换成maxVal 返回值有两个第一个是使用的阈值第二个是输出后的图像 type
CV2.THRESH_BINARYCV2.THRESH_BINARY_INVCV2.THRESH_TRUNCCV2.THRESH_TOZEROCV2.THRESH_TOZERO_INV 上图显示了不同参数下二值化的不同图像第一个图为原始图像后面的为不同的规则。 下列示例将一个灰度图分别以阈值100180进行二值化。
import cv2
import numpy as npimg cv2.imread(./image/lena_small.png)
# 将图片转换为灰度图
img1 cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 将阈值设为100180
ret, img2 cv2.threshold(img1, 100, 255, cv2.THRESH_BINARY)
ret1, img3 cv2.threshold(img1, 180, 255, cv2.THRESH_BINARY)cv2.imshow(orgin_img, img1)
cv2.imshow(img_100, img2)
cv2.imshow(img_180, img3)cv2.waitKey(0) 自适应阈值二值化
有时候由于光照不均匀以及阴影的存在有可能导致阴影部分的白色会被二值化为黑色因此只有一个阈值的缺陷就暴露了出来。 用全局二值化将阈值设置为180时由于阴影的存在会将阴影部分黑化导致显示不完全。因次提出了自适应二值化的方法。
adaptiveThreshod() dst cv2.adaptiveThreshod(img, maxVal, adaptiveMethod, Type, blockSize, C) img需要二值化的图像最好是灰度图 maxVal超过阈值的像素设置成maxVal adaptiveMethod见下图 Type为全局二值化的Type blockSize临近区域的大小填奇数 C常量从计算的平均值或加权平均值中减去一般为0 2.3 腐蚀与膨胀
腐蚀就是将一个图片关键部分“缩小“膨胀将一个图形的关键部分放大。卷积核通常为全1的奇数矩阵。 erode() 原始图像中的一个像素无论是1还是0只有当内核中的所用像素都是1时结果才是1否则结果就是0 dst cv2.erode(img, kenel, iterations 1) img要腐蚀的图像 kenel卷积核全1的矩阵 iterations执行次数默认为1次 getStructuringElement() 便捷API帮助我们获得指定大小的卷积核 kernel cv2.getStructuringElement(type, Size) TypeMORPH_RECT(矩形)MORPH_ELLIPSE(椭圆形部分为1)MORPH_CROSS(十字架部分为1) Size3 35 5… import cv2
import numpy as npimg cv2.imread(./image/j.png)# 自己创建5*5的卷积核
# kernel np.ones((5, 5), np.uint8)
# 获得卷积核
kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
dst cv2.erode(img, kernel)cv2.imshow(orgin_img, img)
cv2.imshow(dst, dst)cv2.waitKey(0) dilate() 只要锚点非0那么结果非0卷积核越大膨胀越大 dst cv2.dilate(img, kernel, iterations 1) img要膨胀的图像 kenel卷积核全1的矩阵 iterations执行次数默认为1次 import cv2
import numpy as npimg cv2.imread(./image/j.png)# 自己创建5*5的卷积核
# kernel np.ones((5, 5), np.uint8)
# 获得卷积核
kernel cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
# # 腐蚀
# dst cv2.erode(img, kernel)# 膨胀
dst cv2.dilate(img, kernel)cv2.imshow(orgin_img, img)
cv2.imshow(dst, dst)cv2.waitKey(0)2.4开、闭、梯度、顶帽、黑帽运算
开运算腐蚀膨胀 闭运算膨胀腐蚀 梯度原图-腐蚀 顶帽原图-开运算 黑帽原图-闭运算
morphologyEx() dst cv2.morphologyEx(img, Type, kernel) img进行操作的原图 kernel噪点大用大核 Type
MORPH_OPEN/MORPH_CLOSE开闭运算MORPH_GRADIENT(梯度运算)MORPH_TOPHAT/MORPH_BLACKHAT顶黑帽
开运算去除文字外的小噪点
闭运算去除文字内的小噪点
梯度运算获得文字的轮廓 顶帽得到大图像外的小图形
黑帽得到大图形内的小图形 以上就是形态学相关API的使用。