莞城微信网站建设,百度首页广告多少钱,网络运营专员主要做什么工作,photoshop 网站设计文章目录 一、灰度处理1.1 cvtColor函数 二、图像二值化处理2.1 全局阈值2.2 自适应阈值 一、灰度处理
1.1 cvtColor函数
函数原型#xff1a;
cv2.cvtColor(src, code[, dst[, dstCn]]) - dst功能#xff1a;转换图像颜色空间。 参数#xff1a;
src: 输入图像。co… 文章目录 一、灰度处理1.1 cvtColor函数 二、图像二值化处理2.1 全局阈值2.2 自适应阈值 一、灰度处理
1.1 cvtColor函数
函数原型
cv2.cvtColor(src, code[, dst[, dstCn]]) - dst功能转换图像颜色空间。 参数
src: 输入图像。code: 颜色空间转换代码。可以取常量cv2.COLOR_BGR2GRAY或cv2.COLOR_RGB2GRAY。dst: 输出图像。dstCn: 输出图像的通道数如果设置为0则跟随转换代码自动设置。
内置函数示例代码
import cv2
img cv2.imread(color.jpg)
img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)cv2.imshow(Gray, img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()灰度处理的原理是将彩色图像转换成灰度图像通常使用的方法是将彩色图像的RGB三个通道的值加权平均得到一个灰度值再用这个灰度值代替RGB三个通道的值从而得到灰度图像。常用的加权平均公式是 g r a y 0.299 × R 0.587 × G 0.114 × B gray 0.299 \times R 0.587 \times G 0.114 \times B gray0.299×R0.587×G0.114×B 其中 R 、 G 、 B R、G、B R、G、B分别是彩色图像的红、绿、蓝通道的值 0.299 、 0.587 、 0.114 0.299、0.587、0.114 0.299、0.587、0.114是加权系数这些系数是心理物理学中根据人眼对不同颜色敏感度的实验结果得出的。这个公式也称为亮度加权法能够比较好地保留彩色图像的明暗对比度。
通过原理实现灰度处理代码
import cv2
img cv2.imread(lean.jpg)
img cv2.resize(img, (240, 240), interpolationcv2.INTER_CUBIC)
height, width img.shape[:2]
gray np.zeros((height, width, 1), dtypeuint8)
for i in range(height):for j in range(width):gray[i][j] img[i][j][0] * 0.114 img[i][j][1] * 0.587 img[i][j][2] * 0.299 # 加权值法# gray[i][j] (img[i][j][0] img[i][j][1]img[i][j][2])/3#平均值法# gray[i][j] max(img[i][j][0],img[i][j][1],img[i][j][2]) #最大值法cv2.imshow(Gray, gray)
cv2.waitKey(0)
cv2.destroyAllWindows()上述代码逐个像素点计算灰度值然后用灰度值代替RGB三个通道的值得到灰度图像并显示出来。值得注意的是这种方法虽然简单易懂但计算每个像素点的灰度值效率较低不适用于处理较大的图像。在实际中我们可以使用OpenCV提供的函数来实现灰度处理以提高程序的执行效率。
注意:灰度图像在Python中数据类型是numpy的uint8类型即8位无符号整型。
二、图像二值化处理
图像二值化处理是将灰度图像上的像素点转化为黑白两种颜色的处理方法。其原理是将灰度图像的像素值按一定的阈值进行分割大于等于阈值的像素值设为一个值通常是255小于阈值的像素值设为另一个值通常是0。这样得到的图像就只有黑白两种颜色便于进行一些形态学处理和特征提取。
图像二值化有两种方法全局阈值和自适应阈值。全局阈值是指将整个图像的像素值都按照同一个阈值进行分割而自适应阈值则是将图像分割成若干个小块然后对每个小块单独计算阈值从而得到更准确的分割结果。下面分别介绍这两种方法的实现方式。
2.1 全局阈值
在OpenCV中使用cv2.threshold()函数可以实现全局阈值二值化。函数原型如下
retval, dst cv2.threshold(src, thresh, maxval, type)参数说明
src为输入图像必须为灰度图。dst为输出图像尺寸和类型与原图像相同。thresh为设定的阈值。maxval为最大值当像素值大于阈值时赋值为maxval。type为阈值处理的类型包括以下几种类型 cv2.THRESH_BINARY二值化当像素值大于阈值时赋值为maxval否则赋值为0。cv2.THRESH_BINARY_INV反二值化当像素值大于阈值时赋值为0否则赋值为maxval。cv2.THRESH_TRUNC截断当像素值大于阈值时赋值为阈值否则不变。cv2.THRESH_TOZERO阈值以下归零当像素值小于阈值时置为0否则不变。cv2.THRESH_TOZERO_INV阈值以上归零当像素值大于阈值时置为0否则不变。
示例代码如下
import cv2# 加载灰度图
img_gray cv2.imread(lena_gray.jpg, 0)# 全局阈值二值化
retval, img_binary cv2.threshold(img_gray, 128, 255, cv2.THRESH_BINARY)# 显示图像
cv2.imshow(original, img_gray)
cv2.imshow(binary, img_binary)
cv2.waitKey()
cv2.destroyAllWindows()其中使用cv2.imread()加载灰度图时第二个参数必须设置为0表示加载灰度图。
2.2 自适应阈值
在OpenCV中使用cv2.adaptiveThreshold()函数可以实现自适应阈值二值化。函数原型和前面的cv2.threshold()函数类似但多了两个参数
dst cv2.adaptiveThreshold(src, maxval, adaptiveMethod, thresholdType, blockSize, C)参数说明
src为输入图像必须为灰度图。maxValue为最大值当像素值大于阈值时赋值为maxValue。adaptiveMethod为自适应阈值算法类型包括以下两种类型 cv2.ADAPTIVE_THRESH_MEAN_C计算每个小区域的平均灰度值作为阈值。cv2.ADAPTIVE_THRESH_GAUSSIAN_C计算每个小区域的高斯加权平均灰度值作为阈值。 thresholdType为阈值处理的类型同全局阈值二值化函数。blockSize为块大小要求为奇数代表自适应阈值计算时使用的小区域大小。C为常数阈值减小的常数。 实例代码如下
import cv2# 加载灰度图
img_gray cv2.imread(lena_gray.jpg, 0)# 自适应阈值二值化
img_binary cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 127, 1)# 显示图像
cv2.imshow(original, img_gray)
cv2.imshow(binary, img_binary)
cv2.waitKey()
cv2.destroyAllWindows()其中使用cv2.ADAPTIVE_THRESH_MEAN_C作为自适应阈值算法计算每个小块的平均值使用cv2.THRESH_BINARY作为阈值处理的类型。阈值大小由blockSize和C两个参数共同决定可以通过调整这两个参数来得到更适合的分割效果。