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梯度运算的技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/970038.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念

目录 前言与导论 碎碎念 所以,我到底需要知道哪些东西呢 从一些基础的概念入手 常见的工具和说法 ST公司 MDK5 (Keil5) CubeMX 如何使用MDK5的一些常用功能 MDK5的一些常见的设置 前言与导论 非常感谢2301_77816627-CSDN博客的提问,他非常好奇…

线程池-抢票系统性能优化

文章目录 引言-购票系统线程池购票系统-线程池优化 池化 vs 未池化 引言-购票系统 public class App implements Runnable {private static int tickets 100;private static int users 10000;private final ReentrantLock lock new ReentrantLock(true);public void run() …

soular基础教程-使用指南

soular是TikLab DevOps工具链的统一帐号中心,今天来介绍如何使用 soular 配置你的组织、工作台,快速入门上手。  1. 账号管理 可以对账号信息进行多方面管理,包括分配不同的部门、用户组等,从而确保账号权限和职责…

大数据SQL调优专题——Hive执行原理

引入 Apache Hive 是基于Hadoop的数据仓库工具,它可以使用SQL来读取、写入和管理存在分布式文件系统中的海量数据。在Hive中,HQL默认转换成MapReduce程序运行到Yarn集群中,大大降低了非Java开发者数据分析的门槛,并且Hive提供命令…

细胞计数专题 | LUNA-FX7™新自动对焦算法提高极低细胞浓度下的细胞计数准确性

现代细胞计数仪采用自动化方法,在特定浓度范围内进行细胞计数。其上限受限于在高浓度条件下准确区分细胞边界的能力,而相机视野等因素则决定了下限。在图像中仅包含少量可识别细胞或特征的情况下,自动对焦可能会失效,从而影响细胞…

JAVA生产环境(IDEA)排查死锁

使用 IntelliJ IDEA 排查死锁 IntelliJ IDEA 提供了强大的工具来帮助开发者排查死锁问题。以下是具体的排查步骤: 1. 编写并运行代码 首先,我们编写一个可能导致死锁的示例代码: public class DeadlockExample {private static final Obj…

leetcode 297. 二叉树的序列化与反序列化

题目如下 我们常常说单独先序遍历不能完整的表示一棵树是有前提条件的。 为什么?先序遍历是按 根节点 左子树 右子树的方向遍历树且遇到空子树直接返回,这样会造成我们并不知道某个节点的左右子树存在与否,故我们无法确定树的形状。但是如果…

pt->onnx->rknn(量化) step by step FAQ

文档修订中... 1.pt->onnx 这个转换是在yolov11的docker环境做的转换。非常简单。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # 获取当前脚本文件所在目录的父目录,并构建相对路径 import os import sys current_dir os.path.dirname(os.path.abspath…

同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展

1 2025开年,人工智能领域迎来了一场前所未有的变革。Deepseek成为代表“东方力量”的开年王炸,不仅在国内掀起了技术热潮,并且在全球范围内引起了高度关注。Deepseek以颠覆性技术突破和现象级应用场景席卷全球,这不仅重塑了产业格…

【css】width:100%;padding:20px;造成超出100%宽度的解决办法 - box-sizing的使用方法 - CSS布局

问题 修改效果 解决方法 .xx {width: 100%;padding: 0 20px;box-sizing: border-box; } 默认box-sizing: content-box下, width 内容的宽度 height 内容的高度 宽度和高度的计算值都不包含内容的边框(border)和内边距(padding&…

C++ Primer 函数基础

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

滤波总结 波形处理原理 如何对一个规律的波形进行滤波 显现出真正的波形 如何设计滤波

需要用到的软件:waveserialport vofa++ 1.波形想用MCU进行采集首先你要考虑到你的采集频率因为如果你的对象波形即你要采集的波形,他过于快速的话有一些MCU它是不能的比如说有一些它的主频才36兆72兆呢你如果遇到一个特别快的波形毫秒级别那他就检测不了 2.…

PyQt组态软件 拖拽设计界面测试

PyQt组态软件测试 最近在研究PyQt,尝试写个拖拽设计界面的组态软件,目前实现的功能如下: 支持拖入控件,鼠标拖动控件位置 拖动控件边缘修改控件大小支持属性编辑器,修改当前选中控件的属性 拖动框选控件,点选控件 控…

算法学习笔记之贪心算法

导引(硕鼠的交易) 硕鼠准备了M磅猫粮与看守仓库的猫交易奶酪。 仓库有N个房间,第i个房间有 J[i] 磅奶酪并需要 F[i] 磅猫粮交换,硕鼠可以按比例来交换,不必交换所有的奶酪 计算硕鼠最多能得到多少磅奶酪。 输入M和…

把 DeepSeek1.5b 部署在显卡小于4G的电脑上

这里写自定义目录标题 介绍准备安装 Ollama查看CUDA需要版本安装CudaToolkit检查Cuda是否装好设置Ollama环境变量验证是否跑在GPU上ollama如何导入本地下载的模型安装及配置docker安装open-webui启动open-webui开始对话 调整gpu精度 介绍 Deepseek1.5b能够运行在只用cpu和gpu内…

第四十四篇--Tesla P40+Janus-Pro-7B部署与测试

环境 系统:CentOS-7 CPU: 14C28T 显卡:Tesla P40 24G 驱动: 515 CUDA: 11.7 cuDNN: 8.9.2.26创建环境 conda create --name trans python3.10torch 2.6.0 transformers 4.48.3克隆项目 git clone https:/…

「vue3-element-admin」Vue3 + TypeScript 项目整合 Animate.css 动画效果实战指南

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

LabVIEW太阳能制冷监控系统

在全球能源需求日益增长的背景下,太阳能作为一种无限再生能源,被广泛应用于各种能源系统中。本基于LabVIEW软件和STM32F105控制器的太阳能制冷监控系统的设计与实现,提供一个高效、经济的太阳能利用方案,以应对能源消耗的挑战。 项…

【openresty服务器】:源码编译openresty支持ssl,增加service系统服务,开机启动,自己本地签名证书,配置https访问

1,openresty 源码安装,带ssl模块 https://openresty.org/cn/download.html (1)PCRE库 PCRE库支持正则表达式。如果我们在配置文件nginx.conf中使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx&#xf…

迅为RK3568开发板篇Openharmony配置HDF控制UART-什么是串口

串口(Serial Port)也叫串行通信接口,通常也叫做 COM 接口,是通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输。 两个 UART 设备的连接示意图如下,UART 与其他模块一般用 2 线…