Преобразование RGB в YIQ и обратно в RGB Python - PullRequest
0 голосов
/ 10 марта 2019

нужна помощь с этим кодом, он выглядит странно.Используя Python и OpenCV

RGB-> YIQ

def RGBtoYIQ():

path = metodos.SelectIMG()
img = cv2.imread(path)
w, h ,c= img.shape
print(img.shape)
Y = np.zeros((w, h))
I = np.zeros((w, h))
Q = np.zeros((w, h))
for i in range(0, w):
    for j in range(0, h):
        R = img[i, j, 2]
        G = img[i, j, 1]
        B = img[i, j, 0]
        # RGB -> YIQ
        Y[i,j] = int((0.299*R) + (0.587 * G) + (0.114 * B))


        I[i,j] = int((0.596 * R) - (0.274 * G) - (0.322 * B))


        Q[i,j] = int((0.211 * R) - (0.523 * G) + (0.312 * B))



yiq = cv2.merge((Y, I, Q))

img_out = yiq.astype(np.uint8)
cv2.imwrite("YIQ.jpg", img_out)
cv2.imshow('Image YIQ', img_out)
cv2.waitKey(0)
cv2.destroyAllWindows()
return img_out

, и результат получился примерно таким: This (rgB_> YIQ) икогда я пытаюсь конвертировать обратно в RGB, используя:

def YIQtoRGB(img):

w, h, c = img.shape
R = np.zeros((w, h))
G = np.zeros((w, h))
B = np.zeros((w, h))
for i in range(0, w):
    for j in range(0, h):
        Y = img[i, j, 2]
        I = img[i, j, 1]
        Q = img[i, j, 0]
        R[i, j] = int((1.000 * Y) + (0.956 * I) + (0.621 * Q))
        R[i, j] = CheckLimite(R[i, j]) #check if pixel>255 or <0
        G[i, j] = int((1.000 * Y) - (0.272 * I) - (0.647 * Q))
        G[i, j] = CheckLimite(G[i, j])
        B[i, j] = int((1.000 * Y) - (1.106 * I) + (1.703 * Q))
        B[i, j] = CheckLimite(B[i, j])

RGB = cv2.merge((B, G, R))
img_out = RGB.astype(np.uint8)
cv2.imwrite("YIQtoRGB.jpg", img_out)
cv2.imshow('Image  RGB', img_out)
cv2.waitKey(0)
cv2.destroyAllWindows()

, что приводит к чему-то вроде this (YIQ-> RGB)

Может кто-нибудь помочь мне, что не такс кодом?

...