首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

OpenCV-Python击中击不中变换案例:绿叶轮廓提取

  • 23-09-22 14:05
  • 4211
  • 11958
blog.csdn.net

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░

一、引言

在前面的博文介绍了HMT变换的基础知识及理解HMT变换的关键知识点,在老猿学习过程中参考的博文《OpenCV中一个最容易搞错的形态学操作 》介绍了两个HMT变换的案例,在《http://iyenn.com/rec/325152.html OpenCV-Python击中击不中变换案例:长方形边界提取》详细介绍了其中的长方形边界提取,本文将简单介绍另一个案例:绿叶轮廓的提取。

老猿关于HMT击中击不中变换系列的博文入口:

http://iyenn.com/rec/324533.html OpenCV-Python击中击不中HITMISS形态变换详解

二、输入图像

本文中的输入图像为《OpenCV中一个最容易搞错的形态学操作 》中提供的图像截图,文件名为:绿叶.jpg:
在这里插入图片描述

三、图像处理

直接使用《http://iyenn.com/rec/325152.html 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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

上述代码中,关于图像显示的相关函数preparePreviewImg、previewImgList的介绍请参考《http://iyenn.com/rec/324926.html OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析》。

得到的图像如下:

在这里插入图片描述
在这里插入图片描述

效果还比较满意,与上面一种代码的中间结果图像进行对比,可以看到不同核的影响。

四、小结

本文在《http://iyenn.com/rec/325152.html OpenCV-Python击中击不中变换案例:长方形边界提取》基础上,介绍了使用击中击不中进行绿叶轮廓的提取案例,通过不同的核可以感知核对击中击不中变换的不同影响。

老猿关于HMT变换系列的博文入口:

http://iyenn.com/rec/324533.html OpenCV-Python击中击不中HITMISS形态变换详解

写博不易,敬请支持:

昨天到今天休假两天,既要处理家里事情,又要处理单位事情,还要写测试代码和博文。写博不易,敬请支持!
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
专栏网址:http://iyenn.com/index/link?url=https://blog.csdn.net/laoyuanpython/category_9979286.html

关于老猿的付费专栏

  1. 付费专栏《http://iyenn.com/index/link?url=https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 http://iyenn.com/rec/324324.html 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《http://iyenn.com/index/link?url=https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《http://iyenn.com/rec/324326.html moviepy音视频开发专栏文章目录》;
  3. 付费专栏《http://iyenn.com/index/link?url=https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《http://iyenn.com/index/link?url=https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《http://iyenn.com/rec/324329.html OpenCV-Python初学者疑难问题集专栏目录 》。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《http://iyenn.com/index/link?url=https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《http://iyenn.com/index/link?url=https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学OpenCV!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

文章知识点与官方知识档案匹配,可进一步学习相关知识
OpenCV技能树首页概览20473 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/110877233"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top