当前位置: 首页 > news >正文

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

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

一、引言

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

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

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击中击不中变换案例:长方形边界提取》基础上,介绍了使用击中击不中进行绿叶轮廓的提取案例,通过不同的核可以感知核对击中击不中变换的不同影响。

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

https://blog.csdn.net/LaoYuanPython/article/details/110676764 OpenCV-Python击中击不中HITMISS形态变换详解

写博不易,敬请支持:

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

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

关于老猿的付费专栏

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

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

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

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

跟老猿学Python、学OpenCV!

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

相关文章:

  • OpenCV-Python击中击不中变换案例:真图作核的绳网结匹配
  • 你不一定全知道的四种Python装饰器实现详解
  • 类的类装饰器简单实现思路及案例
  • OpenCV-Python图形图像处理:自用的一些工具函数源代码
  • OpenCV-Python图形图像处理:自用的一些工具函数功能及调用语法介绍
  • OpenCV-Python图形图像处理:split通道拆分和数组矩阵访问通道
  • Python图像处理:OpenCV HSV和标准表示法的区别以及转换
  • OpenCV-Python图像处理:用inRange刷选图像中指定颜色对象案例
  • PyQt事件信号实战:为QTableWidget提供键盘事件
  • OpenCV-Python图像处理:区分前景背景权重的图像融合案例
  • 2020年总结:平安辞旧岁,老牛自奋蹄!
  • OpenCV-Python图像处理:插值方法及使用resize函数进行图像缩放
  • Python3装饰器的隐秘角落
  • 一种利用Python库解决视频课程检测窗口是否活动的简单方法
  • 人工智能数学基础6:极限、极限运算、ε-δ语言、ε-N语言、级数和函数连续性
  • [译]如何构建服务器端web组件,为何要构建?
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JS题目及答案整理
  • php面试题 汇集2
  • SQLServer之创建数据库快照
  • Vue ES6 Jade Scss Webpack Gulp
  • win10下安装mysql5.7
  • 包装类对象
  • 程序员该如何有效的找工作?
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 人脸识别最新开发经验demo
  • 入手阿里云新服务器的部署NODE
  • 手写一个CommonJS打包工具(一)
  • 系统认识JavaScript正则表达式
  • 一、python与pycharm的安装
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 我们雇佣了一只大猴子...
  • ​ArcGIS Pro 如何批量删除字段
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​ssh免密码登录设置及问题总结
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (C++17) std算法之执行策略 execution
  • (day6) 319. 灯泡开关
  • (Oracle)SQL优化技巧(一):分页查询
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (学习日记)2024.01.19
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)菜鸟学数据库(三)——存储过程
  • (转)用.Net的File控件上传文件的解决方案
  • .gitignore
  • .net经典笔试题
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .skip() 和 .only() 的使用