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
-
均值滤波
均值滤波的目标是降低图像的变化率,将每个像素替换为该像素周围像素的均值,这样就可以平滑并替代那些强度变化明显的区域。
dst = cv2.blur(img, ksize)
dst
:处理后返回的图像;img
:要进行处理的图像矩阵;ksize
:均值滤波核的尺寸,一般长设置为(5,5)或(3,3);
均值滤波代码示例:
img = cv2.blur(img,(5,5))
-
方框滤波
方框滤波和均值滤波核基本一致,区别是需不需要均一化处理。
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)
-
高斯滤波
需要对一个像素周围的像素给予更多的重视,因此可以通过高斯滤波分配权重来实现。
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)
-
中值滤波
以上三种方式均为线性过滤器,而中值滤波为非线性过滤器。
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)