Python教程

2021-08-26 OpenCV (python)学习笔记(三)

本文主要是介绍2021-08-26 OpenCV (python)学习笔记(三),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

OpenCV 基本操作

  • 图像色彩模式转换
  • 图像阈值分割
  • 图形平缓的典型方法
    • 均值滤波
    • 方框滤波
    • 高斯滤波
    • 中值滤波

  • 图像色彩模式转换

st = cv2.cvtColor(src, code)

st:返回处理后的图像;
src:要处理的图像;
code:转换图片的方式,该参数包含很多空颜色空间转换类型;常用标记举例:

  • cv2.COLOR_BGR2GRAY : 从BGR彩色图像转换为GRAY灰度图像;
  • cv2.COLOR_BGR2RGB : 从BGR图像转换为RGB图像;
    更多的值请参考:API文档

图像色彩模式转换代码示例:

import cv2
#读取图片
filename = C:\Users\username\Desktop\opencv
img = cv2.imread(filname + 'picture.jpg')
#将图像转换成灰色图像
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ps:彩色图像与灰色图像的转换是不可逆的。

  • 图像阈值分割

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

ret:当制定了阈值参数thresh,ret就是指定的thresh(一般不用展示,可以随便取);
dst:处理后的单通道图;
src:原图片,只能是单通道图片,通常为灰度图(所以说进行阈值分割前,需要将彩色图像转换成灰度图);
thresh:阈值;
maxval:最大值,当像素值超过了阈值时自动设置为该值;
type:操作类型,即如何处理阈值。该参数包含八种类型的阈值化操作;一下列举五种常用类型:

  • cv2.THRESH_BINARY:超过阈值部分取maxval(最大值),否则取0;
  • cv2.THRESH_BINARY_INV:超过阈值部分取0,否则取maxval(最大值)。它与cv2.THRESH_BINARY是互为反转的方法;
  • cV2.THRESH_TRUNC:大于阈值部分设为阈值,否则不变。即截断阈值;
  • cv2.THRESH_TOZERO:大于阈值部分不改变,否则设为0;
  • cv2.THRESH_TOZERO_INV: 大于阈值部分为0,否则不变。它与THRESH_TOZERO互为反转。

图像阈值分割代码示例:

ret, img2=cv2.threshold(img1,150,250,cv2.THRESH_BINARY)
#对图像进行阈值化处理,像素值超过150的自动设置为250

  • 图形平缓的典型方法

  1. 均值滤波
    均值滤波的目标是降低图像的变化率,将每个像素替换为该像素周围像素的均值,这样就可以平滑并替代那些强度变化明显的区域。
dst = cv2.blur(img, ksize)

dst:处理后返回的图像;
img:要进行处理的图像矩阵;
ksize:均值滤波核的尺寸,一般长设置为(5,5)或(3,3);

均值滤波代码示例:

img = cv2.blur(img,(5,5))

  1. 方框滤波
    方框滤波和均值滤波核基本一致,区别是需不需要均一化处理。
result = cv2.boxFilter(src, depth, ksize, normalize)

result:处理后返回的图像;
depth:表示目标图像深度,是int类型,通常用-1表示与原始图像一致;
ksize:均值滤波核的尺寸,一般长设置为(5,5)或(3,3);
normalize:该属性表示是否对目标图像进行归一化处理。该属性有两个值,True(进行归一化处理,等价于cv2.blur)和False(实际上为求周围各像素的和。但是这个结果很容易大于255,发生溢出,当溢出时对应像素值置为255);

方框滤波代码示例:

img = cv2.boxFilter(img, -1, (5,5), False)

  1. 高斯滤波
    需要对一个像素周围的像素给予更多的重视,因此可以通过高斯滤波分配权重来实现。
cv2.GuassianBlur(img, ksize, sigmaX, sigmaY)

img:要进行处理的图像矩阵;
ksize:均值滤波核的尺寸,一般长设置为(5,5)或(3,3);
sigmaX:X方向的标准偏差;
sigmaY:Y方向的标准偏差;
(ps:如果仅指定了sigmaX,则sigmaY与sigmaX相同。如果两者都为0,则函数根据ksize来自动计算它们的值。)

高斯滤波代码示例:

cv2.GaussianBlur(img, (5,5), 0, 0)

  1. 中值滤波
    以上三种方式均为线性过滤器,而中值滤波为非线性过滤器。
img = cv2.medianBlur(src, ksize)

img:函数返回的处理结果图像;
src:要处理的图像;
ksize:孔径的线性尺寸,若ksize为5,中值滤波器就会使用5×5的范围来计算,即把像素的中心值及其5×5邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉;
(ps:ksize必须是大于1的奇数,比如:3,5,7,9…)

中值滤波代码示例:

img1 = cv2.medianBlur(img, 5)
这篇关于2021-08-26 OpenCV (python)学习笔记(三)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!