首页 > 其他分享 >OpenCV 膨胀与腐蚀

OpenCV 膨胀与腐蚀

时间:2024-08-11 10:55:29浏览次数:9  
标签:kernel dst MORPH image OpenCV 腐蚀 膨胀 getStructuringElement cv

目录

膨胀
腐蚀
一:膨胀实现dilate
二:实现腐蚀erode
相关知识补充
  (一)可以看做膨胀是将白色区域扩大,腐蚀是将黑色区域扩大
  (二)可以不进行灰度处理,对彩色图片进行处理
  (三)getStructuringElement方法
  参数:
  返回值:
膨胀
在这里插入图片描述
在这里插入图片描述

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

一:膨胀实现dilate

import cv2 as cv
import numpy as np

def dilate_demo(image):  #膨胀
    print(image.shape)
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
    dst = cv.dilate(binary,kernel)
    cv.imshow("dilate_demo",dst)

src = cv.imread("./5.png")  #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系

dilate_demo(src)

cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口 

在这里插入图片描述

二:实现腐蚀erode

def erode_demo(image):  #腐蚀
    print(image.shape)
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
    cv.imshow("binary",binary)
    kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))  #可以修改卷积核大小来增加腐蚀效果,越大腐蚀越强
    dst = cv.erode(binary,kernel)
    cv.imshow("erode_demo",dst)

src = cv.imread("./5.png")  #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
cv.imshow("input image",src)    #通过名字将图像和窗口联系

erode_demo(src)

cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口

在这里插入图片描述

kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))

在这里插入图片描述

相关知识补充
(一)可以看做膨胀是将白色区域扩大,腐蚀是将黑色区域扩大
(二)可以不进行灰度处理,对彩色图片进行处理
(1)膨胀
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
dst = cv.dilate(src,kernel)
cv.imshow(“result”,dst)
在这里插入图片描述

(2)腐蚀
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
dst = cv.erode(src,kernel)
cv.imshow(“result”,dst)
在这里插入图片描述

(三)getStructuringElement方法
推文:OpenCV中获取不同形状的结构元素getStructuringElement

自定义一个结构元素kernel,要声明一个Mat,然后对Mat的元素赋值;这种方法灵活但略显复杂
OpenCV提供了一个函数getStructuringElement,可以获取常用的结构元素的形状:矩形(包括线形)、椭圆(包括圆形)及十字形。
getStructuringElement的内部并没有什么优化实现,只是封装了一下功能。其原理同样是声明一个Mat,然后求形状,指定Mat的值。
十字形为单线宽。
总之:getStructuringElement是一种更加简便的方法实现一个kernel
MORPH_RECT, MORPH_ELLIPSE, MORPH_CROSS
参数:
cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
def getStructuringElement(shape, ksize, anchor=None): # real signature unknown; restored from doc
第一个参数shape:表示内核的形状,有三种形状可以选择
矩形:MORPH_RECT;
交叉形:MORPH_CORSS;
椭圆形:MORPH_ELLIPSE;
第二个参数ksize:是内核的尺寸(n,n)
第三个参数anchor:锚点的位置
返回值:
getStructuringElement函数会返回指定形状和尺寸的结构元素。

标签:kernel,dst,MORPH,image,OpenCV,腐蚀,膨胀,getStructuringElement,cv
From: https://blog.csdn.net/m0_37302966/article/details/141087487

相关文章

  • OpenCV 开闭操作
    目录一:开操作(先腐蚀后膨胀)  特点:消除噪点,去除小的干扰块,而不影响原来的图像二:闭操作(先膨胀后腐蚀)  特点:可以填充闭合区域三:利用开操作完成的任务  (一)提取水平垂直线  原理:  (二)消除干扰线  (三)提取满足要求的形状一:开操作(先腐蚀后膨胀)特点:消除噪......
  • 利用OpenCvSharp进行图像相关操作
    前言程序设计过程,有时也需要对图像进行一些简单操作,C#没有现成的图像处理库,但有人对OpenCV进行了包装,我们可以很方便的使用OpenCvSharp对图像进行操作。当然了,这也需要使用的人员进行一些研究,但相对于C++版本,它已经非常友好了。1、显示图像代码:privatevoidbutton1_Click(......
  • 4.3.3 OpenCV 实现 高斯金字塔和拉普拉斯金字塔
    4.3.3OpenCV实现高斯金字塔和拉普拉斯金字塔参考教程:图像处理中的高斯金字塔和拉普拉斯金字塔_拉普拉斯金字塔插入偶数行,偶数列也是用卷积算法吗-CSDN博客1.安装OpenCV1.1下载OpenCV参考教程:无法定位软件包libjasper-dev的解决办法-CSDN博客视觉slam14讲ch5opencv......
  • QT6配置opencv
    参考一个博主的步骤:Qt6MinGW+OpenCV+CMake+Windows11环境搭建详细记录_qt6安装opencv-CSDN博客链接放在这里了QT6默认大家都已经安装好了,没安装的可以去搜索QT6安装的教程1.安装opencv:Releases-OpenCV安装:我安装的opencv默认在C盘,根据自己安装的路径找到opencv目录下......
  • opencv图像增强一:传统图像去噪方法整理
    一、简介:在数字图像处理领域,噪声一直是影响图像质量的重要因素。无论是拍摄过程中的环境干扰,还是传输过程中的信号失真,噪声都可能导致图像模糊、细节丢失,甚至影响后续的图像分析和应用。为了提高图像的视觉效果和使用价值,图像去噪技术应运而生,成为图像预处理环节中不可或缺......
  • OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 +
    本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。原文链接:手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤+源码)导 读    本文将手把手教你用Python和OpenCV搭建一个半自动标注工具(包含详细步骤+源码)。背景介绍    样本标......
  • opencv4.5 带cuda 安装
    opencv4.5cmake-DCMAKE_BUILD_TYPE=RELEASE-DCMAKE_CXX_FLAGS_RELEASE="-O3"-DCMAKE_INSTALL_PREFIX=/home/slam/Thirdpart/opencv-4.5.2/install-DOPENCV_EXTRA_MODULES_PATH=/home/slam/Thirdpart/opencv-4.5.2/opencv_contr......
  • OpenCV图像滤波(6)高斯滤波函数GaussianBlur()的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述函数使用高斯滤波器对图像进行模糊处理。该函数使用指定的高斯核对源图像进行卷积。支持原位过滤。高斯模糊是一种有效的图像平滑技术,可以减少图像中的噪声和细节。函数原型vo......
  • OpenCV图像滤波(7)cv::getDerivKernels() 函数的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述函数返回用于计算空间图像导数的滤波系数。该函数计算并返回用于空间图像导数的滤波系数。当ksize=FILTER_SCHARR时,生成Scharr3x3核(参见Scharr)。否则,生成Sobel核(参见Sob......
  • OpenCV 其他形态学操作
    一:顶帽实现(原图像与开操作图像的差值)importcv2ascvimportnumpyasnpdeftop_hat_demo(image):gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)cv.imshow("binary",binary)......