图像形态学处理

腐蚀操作

import cv2 as cv
import numpy as np

img = cv.imread(‘dige.png‘)
kernel = np.ones((5, 5), np.uint8)
erosion = cv.erode(img, kernel, iterations = 1)

res = np.hstack((img, erosion))
cv.imshow(‘res‘, res)
cv.waitKey(0)
cv.destroyAllWindows()

右边是处理后的结果,白色线条没有了,字体也更加苗条了。

erosion = cv.erode(img, kernel, iterations = 1) :腐蚀函数。 iterations = 1 表示迭代次数为1,迭代次数越高,腐蚀程度越厉害。



再来看一个圆形腐蚀操作例子。

import cv2 as cv
import numpy as np

img = cv.imread(‘pie.png‘)
kernel = np.ones((30, 30), np.uint8)
erosion_1 = cv.erode(img, kernel, iterations = 1)
erosion_2 = cv.erode(img, kernel, iterations = 2)
erosion_3 = cv.erode(img, kernel, iterations = 3)

res = np.hstack((erosion_1, erosion_2, erosion_3))
cv.imshow(‘res‘, res)
cv.waitKey(0)
cv.destroyAllWindows()

膨胀操作

import cv2 as cv
import numpy as np

img = cv.imread(‘dige.png‘)
kernel = np.ones((3, 3), np.uint8)
erosion = cv.erode(img, kernel, iterations = 1) # 先腐蚀

dilate = cv.dilate(erosion, kernel, iterations = 1) # 再膨胀

res = np.hstack((img, erosion, dilate))
cv.imshow(‘res‘, res)
cv.waitKey(0)
cv.destroyAllWindows()

从左到右,依次是:原图,腐蚀,膨胀。 dilate = cv.dilate(erosion, kernel, iterations = 1) 是膨胀函数。

由于腐蚀让原图线条变细了,膨胀又可以让线条还原。

开,闭运算

import cv2 as cv
import numpy as np

img = cv.imread(‘dige.png‘)
kernel = np.ones((5, 5), np.uint8)
opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel) # 开运算
closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel) # 闭运算

res = np.hstack((img, opening, closing))
cv.imshow(‘res‘, res)
cv.waitKey(0)
cv.destroyAllWindows()

从左到右依次是:原图,开运算,闭运算。

opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel) :开运算,先腐蚀,后膨胀

closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel) :闭运算,先膨胀,后腐蚀

梯度运算

import cv2 as cv
import numpy as np

img = cv.imread(‘pie.png‘)
kernel = np.ones((3, 3), np.uint8)
gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)

cv.imshow(‘gradient‘, gradient)
cv.waitKey(0)
cv.destroyAllWindows()

梯度运算简单来说,就是将一张图片的膨胀之后,再减去原来图片的腐蚀的结果,得到的就是上图。

礼帽,黑帽

import cv2 as cv
import numpy as np

img = cv.imread(‘dige.png‘)
kernel = np.ones((3, 3), np.uint8)
tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel) # 礼帽
blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel) # 黑帽

res = np.hstack((img, tophat, blackhat))
cv.imshow(‘res‘, res)
cv.waitKey(0)
cv.destroyAllWindows()

tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel) # 礼帽 :礼帽=原始输入-开运算

blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel) # 黑帽 :黑帽=闭运算-原始输入

原文地址:https://www.cnblogs.com/missdx/p/12359507.html

时间: 2024-10-21 05:36:18

图像形态学处理的相关文章

Atitit 图像处理—图像形态学(膨胀与腐蚀)

Atitit 图像处理-图像形态学(膨胀与腐蚀) 1.1. 膨胀与腐蚀1 1.2. 图像处理之二值膨胀及应用2 1.3. 测试原理,可以给一个5*5pic,测试膨胀算法5 1.4. Photoshop里面的处理5 1.5. 类库的处理,好像没找到jhlabs,6 1.6. Attilax 源码6 1.1. 膨胀与腐蚀 说概念可能很难解释,我们来看图,首先是原图: 膨胀以后会变成这样: 腐蚀以后则会变成这样: 看起来可能有些莫名其妙,明明是膨胀,为什么字反而变细了,而明明是腐蚀,为什么字反而变粗了

OpenCV学习 7:图像形态学:腐蚀、膨胀

原创文章,欢迎转载,转载请注明出处 首先什么是图像形态学?额,这个抄下百度到的答案.基本思想:    用具有一定形态的结构元素去度量和提取图像中的对应形状已达到对图像分析和识别的目的,形态学图像处理表现为一种领域运算方式(这个和前面的模糊运算是一样的运算方式),效果取决于结构元素(就是前面smooth里面的核)的大小,内容以及逻辑运算的性质.看了这些定义是不是很晕,对很晕...我比较关心的是它的用途和怎么计算.    用途是:简化图像数据,保持他们基本的形状特性,并出去不相干的结构.    基本

图像形态学操作—腐蚀膨胀深入

这里我们主要想讲解冈萨雷斯的数字图像处理这本书上膨胀腐蚀的定义及用opencv实现的结果,然后对比它们之间的差异. 一:opencv实现 在这之前可以看我的另外一篇blog:http://blog.csdn.net/lu597203933/article/details/17184439 膨胀: 案例代码: int main() { int a[8][8] = { {0,0,0,0,0,0,0,0}, {0,0,5,1,0,0,1,1}, {0,1,0,1,0,1,0,0}, {0,1,1,2,

图像形态学及更通用的形态学的原理及细节

在试图找到连通分支(具有相似颜色或强度的像素点的大块互相分离的区域)时通常使用膨胀操作.因为在大多数情况下一个大的区域可能被噪声.阴影等类似的东西分割成多个部分,而一次轻微的膨胀又将使这些部分“融合”在一起 如果图像不是二值的,那么膨胀和腐蚀起到的作用不是很明显.在处理灰度和彩色图像时,更通用的cvMorphologyEx可提供更有用的操作. 平滑处理与膨胀腐蚀用的核不同,分别是卷积核与形态核,形态核不需要任何的数值填充核,第132页讲高斯滤波器的时候提到高斯卷积核 开运算先腐蚀后膨胀,可以用来

图像形态学提取边界和区域填充

1.二值图像边界提取.轮廓提取 如果一个点的8邻域都是1,则可以认为这个点是内部的点而不是边界上的点,可以删除这类点,剩下的就是边界上的点.根据腐蚀的特性,使用3*3的结构元素对图像进行腐蚀,可以得到内部的点,那么再用原图减去腐蚀图,就得到了图像的边界. imgPath = 'E:\opencv_pic\src_pic\pic1.bmp'; img = imread(imgPath); img=rgb2gray(img); img = 255-img; se = strel('square',

OpenCV3入门(七)图像形态学

1.膨胀 所谓的图片的膨胀处理,其实就是在图像的边缘添加像素值,使得整体的像素值扩张,进而达到图像的膨胀效果. 对Z2上元素集合A和结构体元素S,使用S对A进行腐蚀,记作: A⊕S={z|(S)z ∩ A ≠ Ø} 让位于图像圆点的结构元素S在Z平面上移动,如果S的圆点移动到z点时,S与A有公共的交集(非空集),则认为这样的z点构成的集合是S对A的膨胀图像. 函数原型: CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, Inpu

图像形态学操作

形态学-腐蚀操作 img = cv2.imread('dige.png') cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows() kernel = np.ones((3,3),np.uint8) erosion = cv2.erode(img,kernel,iterations = 1) cv2.imshow('erosion', erosion) cv2.waitKey(0) cv2.destroyAllWindows()

机器学习进阶-图像形态学操作-膨胀操作 1.cv2.dilate(进行膨胀操作)

1.cv2.dilate(src, kernel, iteration) 参数说明: src表示输入的图片, kernel表示方框的大小, iteration表示迭代的次数 膨胀操作原理:存在一个kernel,在图像上进行从左到右,从上到下的平移,如果方框中存在白色,那么这个方框内所有的颜色都是白色 代码: 1.读取带有毛躁的图片 2.使用cv2.erode进行腐蚀操作 3.使用cv2.dilate进行膨胀操作 import cv2 import numpy as np # 1.读入图片 img

机器学习进阶-图像形态学变化-礼帽与黑帽 1.cv2.TOPHAT(礼帽-原始图片-开运算后图片) 2.cv2.BLACKHAT(黑帽 闭运算-原始图片)

1.op = cv2.TOPHAT  礼帽:原始图片-开运算后的图片 2. op=cv2.BLACKHAT 黑帽: 闭运算后的图片-原始图片 礼帽:表示的是原始图像-开运算(先腐蚀再膨胀)以后的图像 黑帽:表示的是闭运算(先膨胀再腐蚀)后的图像 - 原始图像 代码: 第一步:读取图片 第二步:使用cv2.MOPRH_TOPHAT获得礼帽图片 第三步:使用cv2.MOPRH_BLACKHAT获得黑帽图片 import cv2 import numpy as np # 第一步读入当前图片 img =

图像形态学操作—腐蚀扩展深度

在这里,我们想向大家解释这本书的数字图像处理对冈萨雷斯的扩大和使用腐蚀-definedopencv取得的成果,然后控制它们之间的差异. 一:opencv达到 在这之前能够看我的另外一篇blog:http://blog.csdn.net/lu597203933/article/details/17184439 膨胀: 案例代码: int main() { int a[8][8] = { {0,0,0,0,0,0,0,0}, {0,0,5,1,0,0,1,1}, {0,1,0,1,0,1,0,0},