首页 > 其他分享 >opencv图像处理基础之膨胀和腐蚀

opencv图像处理基础之膨胀和腐蚀

时间:2023-03-10 19:32:11浏览次数:44  
标签:kernel opencv 腐蚀 图像处理 iterations 图像 膨胀 cv

膨胀和腐蚀是图像处理中最常用也是最基础的形态学操作。它可以改变图像的一些属性。其中比较常见的应用场景有:

1、边缘检测:膨胀和腐蚀可以提取二值图像中的边缘信息。通过先膨胀再腐蚀的操作,可以使边缘更加的明显。所以可以为边缘检测提供很好的辅助作用

2、噪声去除:在二值图像中可能存在一些噪声点,或者孤立的像素点,我们通过一定次数的腐蚀操作就可以将孤立的像素点消除掉,也可以通过一定次数的膨胀操作来填充小的噪声点。

3、图像分割:可以通过膨胀和腐蚀的操作,提取文本区域等等

4、形态学重建:形态学重建也是一种基于膨胀和腐蚀处理图像的方法,可以用于重建二值图像中的形状,比如在医学图像处理中就可以使用到形态学重建来分割肺部区域

5、形态学梯度:形态学梯度就是指的膨胀和腐蚀之间的差异,用于检测图像中的物体边缘,比如在工业质检中可以用来检测产品的缺陷和边缘


膨胀的原理:

膨胀操作是将图像中的物体边缘膨胀或者扩张。他将原始图像中的每个像素替换为它的相邻像素中的最大值。膨胀可以使物体变得更加的粗壮或者消除小的孤立区域。


腐蚀的原理:

腐蚀操作是将图像中的物体边缘腐蚀或者缩小。他将原始图像中的每个像素替换为它的相邻像素中的最小值。腐蚀可以使物体变得更加细小或者消除小的噪声点。


函数介绍:

在opencv中,可以用cv2.erode()函数和cv2.dilate()函数来实现腐蚀和膨胀操作。这两个函数都有相似的参数列表:

cv2.erode(src,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])
cv2.dilate(src,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])

其中,src使输入图像,kernel是核元素,用于计算膨胀或腐蚀的结构元素,dst是输出图像,anchor是结构元素的锚点位置,iterations是迭代次数,boderType是用于填充边缘的像素边界类型,borderValue是用于填充边缘的像素值

实例:

我们举个例子:

import cv2 as cv
import numpy as np


def test():
# 读取图像
img = cv.imread("input.jpg", cv.IMREAD_GRAYSCALE)
# 定义结构元素
kernel = np.ones((5, 5), np.uint8)

# 腐蚀操作
erosion = cv.erode(img, kernel, iterations=1)

# 膨胀操作
dilation = cv.dilate(img, kernel, iterations=1)

# 膨胀再腐蚀
re_erosion = cv.erode(dilation, kernel, iterations=1)

cv.imshow("original", img)
cv.imshow("erosion", erosion)
cv.imshow("dilation", dilation)
cv.imshow("re_erosion", re_erosion)
cv.waitKey(0)
cv.destroyAllWindows()


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
test()

原图:

opencv图像处理基础之膨胀和腐蚀_边缘检测

膨胀后的效果(物体变粗):

opencv图像处理基础之膨胀和腐蚀_像素点_02

腐蚀后的效果(物体变细)

opencv图像处理基础之膨胀和腐蚀_像素点_03

先膨胀再腐蚀后的效果(保留了更多的细节,并减少了噪点)

opencv图像处理基础之膨胀和腐蚀_像素点_04


标签:kernel,opencv,腐蚀,图像处理,iterations,图像,膨胀,cv
From: https://blog.51cto.com/gugu/6113487

相关文章

  • 数字图像处理中的颜色
    物理中的颜色物理中的颜色就是不同波长的电磁波但是,根据人眼的视觉效果,可以通过RGB,CMYK,HSB,LAB色域,来将可见光的颜色描述出来。RGBRGB就是我们常说的三原色,即R(red)......
  • opencv初学笔记2(颜色提取与转换)
    opencv初学笔记2(颜色提取与转换)在面对完全不认识的一个技术时,茫然是不可避免的。但是在好奇与任务的驱使下,我一点点地去探索opencv的世界,一点点的试错与调试十分枯燥,可是......
  • opencv初学笔记
    黑马程序员【黑马程序员人工智能教程_10小时学会图像处理OpenCV入门教程】https://www.bilibili.com/video/BV1Fo4y1d7JL?vd_source=2f130c342f954b6e380a92c05c8b4252......
  • 记录一下linux系统编译C++版opencv
    安装:https://blog.csdn.net/NeoZng/article/details/126065521装完后:查看头文件和库文件目录:pkg-config--libsopencv4pkg-config--cflagsopencv4查看OpenCV版本......
  • golang调用opencv实现图像识别
    https://gocv.io/https://github.com/hybridgroup/gocvpackagemainimport( "fmt" "image" "image/color" "os" "strconv" "gocv.io/x/gocv")funcmain(){......
  • opencv重叠图片
    voidtest(){cv::Matimage_mat1=cv::imread("/home/oem/8_temp/maps/地图1/map.pgm");cv::Matimage_mat2=cv::imread("/home/oem/8_temp/maps/地图1/ma......
  • 手把手教你使用LabVIEW OpenCV DNN实现手写数字识别(含源码)
    (文章目录)前言今天和大家一起来看一下在LabVIEW中如何使用OpenCVDNN模块实现手写数字识别一、OpenCVDNN模块1.OpenCVDNN简介OpenCV中的DNN(DeepNeuralNetworkmod......
  • opencv nv12转jpg, 拿到jpg数据
    typedefstructtagRect{intCX;intCY;intWidth;intHeight;}RECT;typedefstructtagRect_ex{RECTrects[12];}RECT_EX;inttest_nv1......
  • OpenCV各版本差异与演化,从1.x到4.0
    写在前面最近因项目需要,得把OpenCV捡起来,登录OpenCV官网,竟然发现release了4.0.0-beata版本,所以借此机会,查阅资料,了解下OpenCV各版本的差异及其演化过程,形成了以下几点认识......
  • matlab实现形态学图像处理
    文章和代码以及样例图片等相关资源,已经归档至【Github仓库:​​digital-image-processing-matlab​​】或者公众号【AIShareLab】回复数字图像处理也可获取。目的膨胀的简......