如何在不使用 cv2.cvtColor() 的情况下将 3 通道图像转换为 1 通道图像?

How to convert 3 channeled image to 1 channeled image without using cv2.cvtColor()?

因此,有人要求我使用每个像素的加权平均值将 BGR 图像转换为 GRAYSCALE

img = cv2.imread('..\Images\horse.jpg',-1)
height = img.shape[0]
width = img.shape[1]
gray = img.copy()
for x in range(img.shape[1]):
  for y in range(img.shape[0]):
     gray[y][x]= (0.11 * img[y][x][0] + 0.6 * img[y][x][1] + 0.3 * img[y][x][2])



print(gray)
print(gray.shape)
cv2.imshow('gray',gray)
cv2.waitkey(0)

生成图像的形状:

(404, 640, 3)

应该是单通道图像吧? 结果显示的图像是 GRAYSCALE,但它仍然是 3 通道图像,任何人都可以帮助我吗?

原因很简单,出现这种情况是因为你在开头复制了整个img,它有三个通道。您只需要像这样复制一个频道:

gray = img[:, :, 0].copy()