Как преобразовать 3-канальное изображение в 1-канальное, не используя cv2.cvtColor ()? - PullRequest
1 голос
/ 28 октября 2019

Итак, меня попросили преобразовать 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)

это должно быть одноканальное изображение, верно? В результате показанное изображение является серым, но все же это изображение с 3 каналами, может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 28 октября 2019

Причина так проста, это происходит потому, что вы скопировали целое img в начале, которое имеет три канала. Вам нужно скопировать только один канал примерно так:

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