栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

opencv 腐蚀算法_opencv腐蚀膨胀函数?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

opencv 腐蚀算法_opencv腐蚀膨胀函数?

目录

一、图像阈值

二、图像平滑处理

1、cv2.blur() 均值滤波

2、cv2.GuassianBlur() 高斯滤波

3、中值滤波

三、形态学腐蚀操作

1.灰度化

2.二值化

3.腐蚀操作

四、形态学膨胀操作


一、图像阈值

ret, dst = cv2.threshold(scr, thresh, maxval, type)

    scr:输入图,只能输入单通道图像;dst:输出图;thresh:阈值;maxval:当图像超过了阈值,所赋予的值;type:二值化操作的类型,包含以下五种类型:

# 超过阈值部分取最大值,否则取0
cv2.THRESH_BINARY#小于阈值的部分取最大值;否则不变 (THRESH_BINARY的反转)
cv2.THRESH_BINARY_INV# 大于阈值部分设置为阈值,否则不变
cv2.THRESH_TRUNC# 大于阈值部分不变,否则设为0
cv2.THRESH_TOZERO# 小于阈值的部分不变,否则设为零  (THRESH_TOZERO的反转)cv2.THRESH_TOZERO_INV

import cv2
#读取图片
face = cv2.imread('./face1.jpg')

#对图片进行阈值操作处理
ret, thresh1 = cv2.threshold(face, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(face, 127, 233, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(face, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(face, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(face, 127, 255, cv2.THRESH_TOZERO_INV)

#将处理后的图片放到一个列表中,再循环展示并保存到同一目录中
imgs = [face, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in range(6):
    cv2.namedWindow('huihui', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('huihui', 500, 700)
    cv2.imshow('huihui', imgs[i])
    # cv2.imshow("face", imgs[i])
    key = cv2.waitKey(0)
    if key == ord('q'):
        break

cv2.destroyAllWindows()

运行结果如图:

 

          face1                      thresh1                       thresh2                        thresh3     

                                                         thresh4                 thresh5


二、图像平滑处理

1、cv2.blur(img,ksize) 均值滤波

img:原图像ksize:核大小,可以理解为每个处理的像素点矩阵均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。将每个像素替换为该像素周围像素的均值。这样就可以平滑并替代那些强度变化明显的区域特征:核中区域贡献率相同。作用:对于椒盐噪声的滤除效果比较好。

# 均值滤波
blur = cv2.blur(img, (5, 5))

 (上面的是原图,下面是均值滤波之后的图)

2、cv2.GuassianBlur(img, ksize) 高斯滤波

​ 高斯滤波在图像处理概念下,将图像频域处理和时域处理相联系,作为低通滤波器使用,可以将低频能量(比如噪声)滤去,起到图像平滑作用。

# 高斯滤波:主要用来处理正态分布的噪声
aussian = cv2.GaussianBlur(img, (5, 5), 1)

#显示并保存连接原图和处理后的图
res2 = np.vstack((img, aussian))
cv2.imshow('all', res2)
cv2.imwrite('./cat1.jpg', res2)

3、中值滤波

由于中值滤波不会处理最大和最小值,所以就不会受到噪声的影响;相反,如果直接采用blur进行均值滤波,则不会区分这些噪声点,滤波后的图像会受到噪声的影响。

中值滤波主要用于处理椒盐噪声。

# 中值滤波:相当于用中值代替
median = cv2.medianBlur(img, 5)

res2 = np.vstack((img, median))
cv2.imshow('all', res2)

三、形态学腐蚀操作

   腐蚀的作用是消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点;

   进行腐蚀操作时首先需要对图片进行灰度化、二值化。

1.灰度化

有两种方法:

        1)读取图片时设置灰度格式,即0

cv2.imread('picture.jpg', img, 0)

         2)灰度化处理图片

# gray是灰度图,img是原图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

2.二值化
#thresh1是二值化之后的图,gray是灰度图
ret, thresh1 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

3.腐蚀操作
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(thresh1, kernel, iterations=1)
#erosion是腐蚀操作之后的图片

 

完整代码如下:

import cv2
import numpy as np

img = cv2.imread('./erode.png')
img = cv2.resize(img, dsize=(400, 300))
#设置图片尺寸

kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel, iterations=1)

res1 = np.vstack((img, erosion))

cv2.imshow('erosion.png', res1)
cv2.waitKey(0)

cv2.destroyAllWindows()

 (上图是原图,下面为腐蚀操作之后的图)

四、形态学膨胀操作

膨胀的作用是将与物体接触的所有背景点合并到物体中,使目标增大,可添补目标中的孔洞。

kernel = np.ones((5, 5), np.uint8)
dilate = cv2.dilate(erosion, kernel, iterations=1)

在腐蚀操作之后再进行膨胀操作是一对逆运算,通常两者相互配合使用。

(腐蚀之后再膨胀的效果如下图)

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783060.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号