Преобразование пикселей RGB в оттенки серого в Python.Нет matplot или PIL - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть домашнее задание, которое я очень хочу выяснить.Мы провели только два лекционных дня на opencv, так что я буду слеп с этим.

Задача - преобразовать RGB-изображение в градации серого, используя формулу яркости 0,02126 * R + 0,7152 * G + 0,0722 * B

Таким образом, тип каждого пикселя должен совпадать с исходнымобраз.Нам не разрешено использовать matplot или PIL, что я часто видел, пытаясь понять это.

Код, который у меня сейчас есть, выводит только серое изображение.Так что вместо graySCALE он только серый.Я так потерян, пожалуйста, помогите.

import cv2
import numpy as np
def togray():
    img = cv2.imread("fruits.jpg")
    cv2.imshow('Original',img)
    height, width, channels = img.shape
    img2 = np.ndarray (shape=(height,width,))
    for i in range(height):
        for j in range(width):
            img2[i,j]=(0*0.2126 + 0.7152*1 + 0.0722*2)

    cv2.imshow('Grayscale',img2)
    cv2.waitKey(0)

togray()

1 Ответ

0 голосов
/ 30 ноября 2018

Попробуйте сделать img2 = 0.02126*img[:,:,2] + 0.7152*img[:, :,1] + 0.0722*img[:,:,0]

Комментарий Жюльена был неверным по двум причинам: (i) Форма изображения (m, n, 3) в opencv.Это объясняет, почему эта индексация дает вам меньшую коробку.(ii) каналы opencv - это BGR, а не RGB, поэтому вам нужно поменять местами индексы 2 и 0, как я сделал здесь.(Фактический результат не должен сильно меняться, если учесть, насколько малы вклады терминов R и B).

...