Почему преобразование BGR в YCbCr в OpenCV наследует другое значение по сравнению с ручным подсчетом с использованием уравнения?
Я попытался проверить, имеет ли преобразование моего изображения то же значение RGB, что и преобразование вручную с использованием уравнения RGB в YCbCr. Используя python:
import cv2
import numpy as np
file_src='rgb_color.bmp' //input image
file_dst='ycbcr_color.bmp' //output image
img_src=cv2.imread(file_src,1) //read input image
cv2.namedWindow('src')
cv2.namedWindow('dst')
img_dst=cv2.cvtColor(img_src,cv2.COLOR_BGR2YCrCb)
cv2.imshow('src',img_src)
cv2.imshow('dst',img_dst)
cv2.imwrite(file_dst,img_dst) //write output file as ycbcr_color.bmp
cv2.waitKey(0)
cv2.destoyAllWindows()
которые успешно конвертируют изображение RGB в предположительно YCrCb
(со значением85 255 76 43 21 150 255 107 29 128 128 255
) при ручном использовании уравнения и преобразовании их в изображение дает мне это(со значением82 90 240 145 54 34 41 240 110 235 128 128
).
Влияет ли на это тот факт, что OpenCV читает RGB как BGR? или OpenCV читает YCbCr как YCrCb (судя поcv2.COLOR_BGR2YCrCb
)
1 ответ
Для будущего пользователя Google:
Стандартные уравнения для преобразования и то, что делает OpenCV, немного отличаются. OpenCV вычисляет масштабированные и смещенные версии каналов. См. Docs.opencv.org/3.4/de/d25/imgproc_color_conversions.html vs. en.wikipedia.org/wiki/YCbCr#JPEG_conversion - rayryeng