Python-OpenCV 笔记2 -- 图像的基本属性和操作

Python-OpenCV 笔记2 – 图像的基本属性和操作


1、图片基本属性

# 图像的类型
type(image)

# 图像的大小,元组(行,列,通道)
image.shape

# 图像的大小,值为shape三个元素的乘积
image.size 

# 图像像素的数据类型
image.dtype

2、图片基本操作

图像缩放:

# 缩放为指定尺寸
img1 = cv2.resize(img1, (1000, 750))

图像颜色转换:

# 彩色图转灰度图
img = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)

图像通道分离和合并:

# 注意通道的顺序是b, g, r
# 图像通道分离
b,g,r = cv2.split(img)  

b = cv2.split(img)[0]  
g = cv2.split(img)[1]  
r = cv2.split(img)[2]

# 图像通道合并
img = cv2.merge([b,g,r])

3、图像滤波

均值滤波(Averaging):

# 函数原型
blur(src, ksize[, dst[, anchor[, borderType]]]	)

# 实例
blur =  cv2.blur(img, (3,3))
  • src:输入图片
  • ksize:滑动窗口的大小,(x, x),x通常为奇数3,5,7,9
  • dst:输出图片
  • anchor:锚点,即滑动窗口的计算点,(-1, -1)表示中心点
  • borderType:超出图像的像素点插值方式

高斯滤波(Gaussian Blurring):

# 函数原型
GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])

# 实例
blur = cv2.GaussianBlur(img,(5,5),0)
  • sigmaX:高斯核X方向的标准差,XY都等于0时按照ksize的宽和高来定
  • sigmaY:高斯核Y方向的标准差,等于0或默认时=sigmaX
  • 标准差越大中间元素的占比越大

中值滤波(Median Blurring):

# 函数原型
medianBlur(src, ksize[, dst])

# 实例
median = cv2.medianBlur(img,5)
  • ksize:核大小,一个正整数,通常3,5,9
  • 对椒盐噪声效果好

双边滤波(Bilateral Filtering):

# 函数原型
bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])

# 实例
blur = cv2.bilateralFilter(img,9,75,75)
  • 边缘较其它滤波清晰,比较耗时
  • d:核的直径,推荐<=5
  • sigmaColor:颜色空间参数,越大表示较远的相同颜色像素值影响越大
  • sigmaSpace:坐标空间参数,越大时离得较远的像素影响越大

4、图像二值化

函数原型:

# 普通阈值
threshold(src, thresh, maxval, type, dst=None)

# 自适应阈值,图片分成小块计算阈值
adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,C,dst=None)
  • src:输入图片
  • thresh:灰度值阈值
  • maxval:最大的灰度值
  • type:二值化方法。THRESH_BINARY,THRESH_BINARY_INV,THRESH_TRUNC,THRESH_TOZERO , THRESH_TOZERO_INV ,THRESH_OTSU(最佳阈值)
  • dst:输出图片
  • maxValue:与 maxval 相同
  • adaptiveMethod:ADAPTIVE_THRESH_MEAN_C(通过平均的方法取得平均值)、ADAPTIVE_THRESH_GAUSSIAN_C(通过高斯取得高斯值) ,这两种方法最后得到的结果要减掉参数里面的C值
  • thresholdType:与 type 相同
  • blockSize:计算阈值的邻域块大小,正方形,必须为奇数
  • C:偏移值,计算出的自适应阈值要加上该偏移值
# 灰度值超过 100 的变为 255,小于的为 0
ret, thresh1 = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY)

# 最佳阈值二值化
ret, thresh1 = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

# 自适应阈值,返回值没有ret
thresh1 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 5)

Python-OpenCV 笔记2 -- 图像的基本属性和操作_第1张图片


5、图像梯度图

Sobel 算子:

函数原型:

Sobel(src, ddepth, dx, dy, dst=None, ksize=None, scale=None, delta=None, borderType=None)
  • src:待计算的输入图
  • ddepth:图片的深度
  • dx:x轴的微分阶数
  • dy:y轴的微分阶数
  • dst:输出图片
  • ksize:算子的核大小,必须为1、3、5、7
  • scale:微分值的缩放系数
  • delta:微分值的偏差值
  • borderType:数值的插值类型
# Sobel算子求水平和垂直梯度
x = cv2.Sobel(img, cv2.CV_16S, 1, 0)
y = cv2.Sobel(img, cv2.CV_16S, 0, 1)

# 求梯度的绝对值
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)

# 水平和垂直梯度的加权和
dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

6、Canny边缘检测

Canny边缘检测原理

# 函数原型
Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]])
Canny(dx, dy, threshold1, threshold2[, edges[, L2gradient]])

# 实例
edges = cv2.Canny(img,100,200)
  • image:输入图片,必须为单通道灰度图
  • dx:输入图片的x方向梯度图
  • dy:输入图片的y方向梯度图
  • threshold1:选择是否保留某点梯度的阈值低值
  • threshold2:选择是否保留某点梯度的阈值高值
  • apertureSize:Sobel算子的核大小

你可能感兴趣的:(Python-OpenCV,图像二值化,图像梯度,图像滤波,canny边缘检测,python-opencv)