opencv 灰度实验
- 1. 最大值法
- 2. 平均值法
- 3. 加权均值法
- 4(直接读取灰度图)cv2.IMREAD_GRAYSCALE
- 5内置将原图转换为灰度图cv2.cvtColor()
- 6 两个极端的灰度值
灰度图与彩色图最大的不同就是:彩色图是由R、G、B三个通道组成,而灰度图只有一个通道,也称为单通道图像,所以彩色图转成灰度图的过程本质上就是将R、G、B三通道合并成一个通道的过程。
1. 最大值法
对于彩色图像的每个像素,它会从R、G、B三个通道的值中选出最大的一个,并将其作为灰度图像中对应位置的像素值。
代码如下:
'''灰度处理——最大值法'''#读取图像img=cv2.imread(r'./src/1.jpg')#取出图像的高度,宽度和BGR(颜色)h,w,c=img.shapeimg_gray=np.zeros((h,w),dtype=np.uint8) #构造出和原图形状相同的灰度图# 遍历原图像的每个元素for row in range(h):for col in range(w):# 取出原图形中的BGRb,g,r=img[row,col]# 将bgr的最大值赋值给灰度图max_value=max(b,g,r)img_gray[row,col]=max_value# 显示原图和灰度图cv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)
步骤:
- 1.读取原图像
- 2.获取原图像的高度,宽度,和BGR(颜色)
- 3.根据原图的高度和宽度构建出一个和原图形状相同的二维数组,类型dtype=np.uint8
- 4.遍历原图像的每个像素点得到每个像素点的BRG
- 5.将每个像素点的BRG进行大小比较找出最大值
- 6.再把这个最大值赋值个与原图同一个高度和宽度的灰度图
- 7最后将两个图片显示出来
2. 平均值法
对于彩色图像的每个像素,它会将R、G、B三个通道的像素值全部加起来,然后再除以三,得到的平均值就是灰度图像中对应位置的像素值。
代码如下:
'''灰度处理——均值法'''img=cv2.imread(r"./src/1.jpg")h,w,c=img.shapeimg_gray=np.zeros((h,w),dtype=np.uint8)for row in range(h):for col in range(w):b,g,r=img[row,col]mean_value=(b+g+r)//3img_gray[row,col]=mean_valuecv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)
步骤跟最大值法一样
3. 加权均值法
对于彩色图像的每个像素,它会按照一定的权重去乘以每个通道的像素值,并将其相加,得到最后的值就是灰度图像中对应位置的像素值。本实验中,权重的比例为: R乘以0.299,G乘以0.587,B乘以0.114,这是经过大量实验得到的一个权重比例,也是一个比较常用的权重比例。
代码如下:
'''灰度处理——加权均值法'''img=cv2.imread(r"./src/1.jpg")h,w,c=img.shapeimg_gray=np.zeros((h,w),dtype=np.uint8)for row in range(h):for col in range(w):b,g,r=img[row,col]mean_value=(b*0.229+g*0.599+r*0.144)img_gray[row,col]=mean_valuecv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)
4(直接读取灰度图)cv2.IMREAD_GRAYSCALE
代码如下:
'''灰度处理——内置属性直接读取灰度图'''img_gray=cv2.imread(r'./src/1.jpg',cv2.IMREAD_GRAYSCALE)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)
5内置将原图转换为灰度图cv2.cvtColor()
cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
代码如下:
'''灰度处理——内置将原图转换为灰度图'''img=cv2.imread(r"./src/1.jpg")img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)cv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)