OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python

目录

一、图像阈值

二、图像平滑处理

1、cv2.blur() 均值滤波

2、cv2.GuassianBlur() 高斯滤波

3、中值滤波

三、形态学腐蚀操作

1.灰度化

2.二值化

3.腐蚀操作

四、形态学膨胀操作


一、图像阈值

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

  1. scr:输入图,只能输入单通道图像;
  2. dst:输出图;
  3. thresh:阈值;
  4. maxval:当图像超过了阈值,所赋予的值;
  5. 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()

运行结果如图:

 OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第1张图片OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第2张图片OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第3张图片OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第4张图片

          face1                      thresh1                       thresh2                        thresh3     

OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第5张图片OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第6张图片

                                                         thresh4                 thresh5


二、图像平滑处理

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

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

    OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第7张图片

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

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)

OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第8张图片

3、中值滤波

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

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

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

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

OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第9张图片

三、形态学腐蚀操作

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

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

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()

OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第10张图片

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

四、形态学膨胀操作

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

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

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

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

OpenCv学习笔记(二):图像阈值、平滑处理、腐蚀与膨胀python_第11张图片

 

你可能感兴趣的:(opencv,python,图像处理)