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

python学opencv|读取图像(六十二)使用cv2.morphologyEx()形态学函数实现图像梯度处理

【1】引言

前序已经学习了腐蚀和膨胀的单独作用函数,还研究了按照不同顺序调用腐蚀和膨胀函数调整图像效果,相关文章包括且不限于:

python学opencv|读取图像(六十一)先后使用cv2.dilate()函数和cv2.erode()函数实现图像处理-CSDN博客

python学opencv|读取图像(六十)先后使用cv2.erode()函数和cv2.dilate()函数实现图像处理-CSDN博客

python学opencv|读取图像(五十九)使用cv2.dilate()函数实现图像膨胀处理-CSDN博客

python学opencv|读取图像(五十八)使用cv2.erode()函数实现图像腐蚀处理-CSDN博客

今天在此基础上,研究另一种图像处理操作:梯度运算。

梯度运算的本质上还是膨胀和腐蚀运算,不过使用膨胀土减去俯视图,随意最后会凸显图像大致的轮廓。

【2】官网教程

点击下述链接,直达cv2.morphologyEx()函数的官网说明页面:

OpenCV: Image Filtering

这个页面主要介绍了cv2.morphologyEx()函数的参数:

图1 cv2.morphologyEx()函数的官网说明页面

具体的,cv2.morphologyEx()函数的参数意义为:

void cv::morphologyEx     (     

        InputArray     src,                                #输入图像
        OutputArray     dst,                             #输出图像
        int     op,                                             #图像操作方法
        InputArray     kernel,                          #像素核
        Point     anchor = Point(-1,-1),           #像素核的锚点位置
        int     iterations = 1,                            #迭代次数,默认值为1
        int     borderType = BORDER_CONSTANT,               #边界样式,可选参数
        const Scalar &     borderValue = morphologyDefaultBorderValue() ) #边界值,可选参数

由于cv2.morphologyEx()函数的图像操作方法多,所以点击链接到达方法说明网页:

OpenCV: Image Filtering

在这个页面,主要看梯度方法 MORPH_GRADIENT:

图2 cv2.morphologyEx()函数的方法-官网说明页面 

在图2可以看到,MorphTypes下有多种方法,其中erode腐蚀,dilate膨胀已经完成学习。此外,定义了先腐蚀后膨胀为open开运算,先膨胀后腐蚀为close闭运算,膨胀运算减去腐蚀运算是GRADIENT梯度运算。

【3】代码测试

由于只需要在cv2.morphologyEx()函数中直接调用GRADIENT方法就可以实现梯度运算,这里直接给出完整代码:

import cv2 as cv  # 引入CV模块
import numpy as np  # 引入numpy模块

# 定义核
k = np.ones((3, 3), np.uint8)  # 定义核
k1 = np.ones((5, 5), np.uint8)  # 定义核
k2 = np.ones((7, 7), np.uint8)  # 定义核

# 读取图片
srcm = cv.imread('srcbl.png')  # 读取图像srcck.png

# 图像计算
#dstpz1 = cv.dilate(srcm, k)  # 图像膨胀运算,膨胀核大小为(3,3)
#dstpz2 = cv.dilate(srcm, k1)  # 图像膨胀运算,膨胀核大小为(5,5)
#dstpz3 = cv.dilate(srcm, k2)  # 图像膨胀运算,膨胀核大小为(7,7)

#dstfs1 = cv.erode(dstpz1, k)  # 图像腐蚀运算,像素核大小为(3,3)
#dstfs2 = cv.erode(dstpz2, k1)  # 图像腐蚀运算,像素核大小为(5,5)
#dstfs3 = cv.erode(dstpz3, k2)  # 图像腐蚀运算,像素核大小为(7,7)

dst=cv.morphologyEx(srcm,cv.MORPH_GRADIENT,k)
dst1=cv.morphologyEx(srcm,cv.MORPH_GRADIENT,k1)
dst2=cv.morphologyEx(srcm,cv.MORPH_GRADIENT,k2)
# 显示结果
cv.imshow('srcm ', srcm)
cv.imshow('dsttd', dst)
cv.imwrite('dsttd.png', dst)
cv.imshow('dsttd1', dst1)
cv.imwrite('dsttd1.png', dst1)
cv.imshow('dsttd2', dst2)
cv.imwrite('dsttd2.png', dst2)

# 窗口控制
cv.waitKey()  # 图像不关闭
cv.destroyAllWindows()  # 释放所有窗口

代码运算使用的相关图像有:

图3 初始图像srcbl.png

 图4 梯度图像dsttd.png

 图5 梯度图像dsttd1.png 

 图6 梯度图像dsttd2.png 

由图3至图6可见,在cv2.morphologyEx()函数中直接调用GRADIENT方法进行梯度运算时,图像效果为膨胀运算减去腐蚀运算,但随着运算使用的像素核的增大,获得的梯度运算图像轮廓逐渐变得不够清晰。

【4】细节说明

梯度运算本身获得的轮廓就是不够精准的轮廓,因此尽可能调小像素核才能获得较为清晰的图像轮廓。

【5】总结

掌握了使用python+opencv调用cv2.morphologyEx()函数实现图像GRADIENT梯度运算的技巧。


http://www.kler.cn/a/546682.html

相关文章:

  • html+css设计情人节网页制作主页页面
  • Ai人工智能的未来:趋势、挑战与机遇
  • Go GUI 框架, energy many-browser 示例解读
  • 微信小程序医院挂号系统
  • 或非门组成的SR锁存器真值表相关问题
  • [npm install 报错] Verion 9 of Highlight.js has reached EOL
  • 信息收集-Web应用备案产权Whois反查域名枚举DNS记录证书特征相似查询
  • Oracle VirtualBox虚拟机软件中安装ubuntu
  • elasticsearch 备份恢复步骤
  • synchronized关键字
  • 【第2章:神经网络基础与实现——2.3 多层感知机(MLP)的构建与调优技巧】
  • 小小小病毒(3)(~_~|)
  • java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义
  • 初学总结SpringBoot项目在mac上环境搭建和运行
  • 每日一题——最长公共子序列
  • gitcode使用导航
  • ProxySQL构建PolarDB-X标准版高可用路由服务三节点集群
  • 盛铂科技SWFA200捷变频频率综合器:高速跳频与卓越性能的完美结合
  • flutter常见面试题(欢迎私信投稿——更新到10)
  • 华为手机鸿蒙4回退到鸿蒙3到鸿蒙2再回退到EMUI11 最后关闭系统更新