图像放大缩小是处理图像的基本操作,接下来的图像灰度处理也是基本操作,简称基操。
图像灰度化就是将有色图转换为灰度图,目的是简化图像矩阵,加快运算速度。图像还是选用三体图像。
加权公式:GRAY = 0.3 * R + 0.59 * G + 0.11 * B
import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread("three_body.jpg")
def weight_gray(image):
weight_image = image[:, :, 0] * 0.11 + image[:, :, 1] * 0.59 + image[:, :, 2] * 0.3 # 三个通道加权求和, opencv的颜色通道模式是BGR
weight_image = weight_image.astype(np.uint8)
return weight_image
plt.imshow(weight_gray(image), cmap='gray') # plt默认显示三个通道,设置cmap='gray'显示一个通道
def average_gray(image):
average_image = (image[:, :, 0] + image[:, :, 1] + image[:, :, 2]) / 3 # 三个通道加和求平均
average_image = average_image.astype(np.uint8)
return average_image
plt.imshow(average_gray(image), cmap='gray')
def max_gray(image):
h, w = image.shape[: -1]
max_image = np.zeros((h, w))
for i in range(h):
for j in range(w):
max_image[i, j] = np.max([image[i, j, 0], image[i, j, 1], image[i, j, 2]]) # 选取三通道中最大的像素值
max_image = max_image.astype(np.uint8)
return max_image
plt.imshow(max_gray(image), cmap='gray')
三种方法,从结果来看,第一种比较好,第二种图像的结果糊了,第三种相对于第一种图像偏亮,因为取的是三个通道的最大值。图像灰度处理过后就可以进入图像边缘检测,敬请期待。