在前面的博文介绍了HMT变换的基础知识及理解HMT变换的关键知识点,在老猿学习过程中参考的博文《OpenCV中一个最容易搞错的形态学操作 》介绍了两个HMT变换的案例,在《https://blog.csdn.net/LaoYuanPython/article/details/110868988 OpenCV-Python击中击不中变换案例:长方形边界提取》详细介绍了其中的长方形边界提取,本文将简单介绍另一个案例:绿叶轮廓的提取。
https://blog.csdn.net/LaoYuanPython/article/details/110676764 OpenCV-Python击中击不中HITMISS形态变换详解
本文中的输入图像为《OpenCV中一个最容易搞错的形态学操作 》中提供的图像截图,文件名为:绿叶.jpg:
直接使用《https://blog.csdn.net/LaoYuanPython/article/details/110868988 OpenCV-Python击中击不中变换案例:长方形边界提取》的代码修改输入图像文件名进行提取,得到如下图:
可能由于从博文《OpenCV中一个最容易搞错的形态学操作 》中截图带来了图像质量损失,结果图像出现了噪点。为此将代码做了一下调整,先对二值图做闭运算,同时尝试使用另外一组核来处理,代码如下:
import cv2
import numpy as np
from opencvPublic import preparePreviewImg,previewImgList,readImgFile
def hitMissTest(imgObj,kernalObj,extendBorder=True):
if isinstance(imgObj,str):
img = readImgFile(imgObj,True,True)
else:img = imgObj
if isinstance(kernalObj,str):
kernal = readImgFile(kernalObj,True,True)
else:kernal = kernalObj
if extendBorder:dest = cv2.morphologyEx(img, cv2.MORPH_HITMISS, kernal,borderType=cv2.BORDER_CONSTANT,borderValue=0)
else:dest = cv2.morphologyEx(img, cv2.MORPH_HITMISS, kernal)
return dest
def main():
kernal1 = np.array([[0, 0, 0],
[ 0,-1, 1],
[ 0, 0, 0]])
kernal2 = np.array([[0, 0, 0],
[1,-1, 0],
[0, 0, 0]])
imgFName = r'f:\pic\绿叶.JPG'
img = readImgFile(imgFName, True, True) #自定义函数,读取指定文件的图像,后面两个参数分别代表是否转为灰度图、是否转为二值图
preparePreviewImg(img, imgFName + ': 二值图')
kernal = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
imgClose = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernal)
preparePreviewImg(imgClose, imgFName + ': 闭运算')
dest1 = hitMissTest(imgClose,kernal1,True)
preparePreviewImg(dest1, '核1 HMT结果')
dest2 = hitMissTest(imgClose, kernal2,True)
preparePreviewImg(dest2, '核2 HMT结果')
dest = cv2.add(dest1,dest2)
preparePreviewImg(dest,'两次HMT变换相加结果')
previewImgList()
cv2.waitKey(5000)
main()
上述代码中,关于图像显示的相关函数preparePreviewImg、previewImgList的介绍请参考《https://blog.csdn.net/LaoYuanPython/article/details/109984045 OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析》。
效果还比较满意,与上面一种代码的中间结果图像进行对比,可以看到不同核的影响。
本文在《https://blog.csdn.net/LaoYuanPython/article/details/110868988 OpenCV-Python击中击不中变换案例:长方形边界提取》基础上,介绍了使用击中击不中进行绿叶轮廓的提取案例,通过不同的核可以感知核对击中击不中变换的不同影响。
https://blog.csdn.net/LaoYuanPython/article/details/110676764 OpenCV-Python击中击不中HITMISS形态变换详解
昨天到今天休假两天,既要处理家里事情,又要处理单位事情,还要写测试代码和博文。写博不易,敬请支持!
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
专栏网址:https://blog.csdn.net/laoyuanpython/category_9979286.html
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。