书名:计算机视觉40例从入门到深度学习:OpenCV-Python
作者:李立宗
出版社:电子工业出版社
出版时间:2022-07-01
ISBN:9787121436857
二、理论基础
3、按照面积筛选前景对象
- 在查找图像轮廓时,会查找图像内所有对象的轮廓。
也就是说,不仅会查找到图像内正常对象的轮廓,还会查找到一些噪声的轮廓。
所以,在对图像内的对象进行计数时,并不需要对查找到的所有轮廓进行计算,只需计算面积大于一定数值的轮廓个数。 - 函数cv2.contourArea()用于计算轮廓面积
4、核函数
- 在进行形态学操作时,必须使用一个特定的核(结构元)
- 该核可以通过自定义生成,也可以通过函数cv2.getStructuringElement()构造。
- 函数cv2.getStructuringElement()能够构造并返回一个用于形态学操作的指定大小和形状的核。
- 除了使用该函数,用户也可以自己构建任意二进制掩模作为形态学操作中使用的核。
5、getStructuringElement()
retval = cv2.getStructuringElement( shape, ksize[,anchor])
- shape表示形状类型,有3种,矩形,十字形(对角线为1),椭圆形
- ksize表示核的大小
- anchor表示核中的锚点位置。
默认的值是(-1,-1),是形状的中心。只有十字形结构的核与锚点位置紧密相关。在其他情况下,锚点位置仅用于形态学运算结果的调整。
四、不同结构的核对形态学操作的影响
import cv2
o=cv2.imread("d:\\kernel.jpg",cv2.IMREAD_UNCHANGED)
kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT,(59,59))
kernel2 = cv2.getStructuringElement(cv2.MORPH_CROSS,(59,59))
kernel3 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(59,59))
dst1 = cv2.dilate(o, kernel1)
dst2 = cv2.dilate(o, kernel2)
dst3 = cv2.dilate(o, kernel3)
cv2.imshow("orriginal",o)
cv2.imshow("dst1",dst1)
cv2.imshow("dst2",dst2)
cv2.imshow("dst3",dst3)
cv2.waitKey()
cv2.destroyAllWindows()
● 图(a)是原始图像o。
● 图(b)是使用矩形结构的核对原始图像进行膨胀操作的结果dst1。
● 图(c)是使用十字形结构的核对原始图像进行膨胀操作的结果dst2。
● 图(d)是使用椭圆形结构的核对原始图像进行膨胀操作的结果dst3。
网友评论