В настоящее время я преобразовываю изображение из Формат RGB в YCrCb с использованием функции OpenCV - cvtColor
. Я хотел бы выполнить преобразование в одиночку с уравнениями, похожими наПреобразование RGB в YCbCr в OpenCV
//equations for RGB to YUV conversion
Y' = 0.299 R + 0.587 G + 0.114 B
U = -0.147 R - 0.289 G + 0.436 B
V = 0.615 R - 0.515 G - 0.100 B.
Я не могу понять OpenCV матричную операцию изображения. Я хотел бы получить доступ к значениям пикселей RGB из изображения Mat
, чтобы я мог выполнить преобразование самостоятельно. Как я могу получить значения R, G, B из образа, а затем как применить преобразование? Мой текущий код ниже.
int main (int argc, char *argv[])
{
// Load in image
cv::Mat src = cv ::imread("C:\\openv2410\\frames\\frame_0.png",1);
// Create a vector for the channels and split the original image into B G R colour channels.
// Keep in mind that OpenCV uses BGR and not RGB images
vector<cv::Mat> spl;
split(src,spl);
// Create an zero pixel image for filling purposes - will become clear later
// Also create container images for B G R channels as colour images
cv::Mat empty_image = cv::Mat::zeros(src.rows, src.cols, CV_8UC1);
cv::Mat empty_channel = cv::Mat::zeros(src.rows, src.cols, CV_8UC1);
cv::Mat result_blue(src.rows, src.cols, CV_8UC3); // notice the 3 channels here!
cv::Mat result_green(src.rows, src.cols, CV_8UC3); // notice the 3 channels here!
cv::Mat result_red(src.rows, src.cols, CV_8UC3); // notice the 3 channels here!
// Create blue channel
cv::Mat in1[] = { spl[0], empty_image, empty_image };
int from_to1[] = { 0,0, 1,1, 2,2 };
mixChannels(in1, 3, &result_blue, 1, from_to1, 3);
// Create green channel
cv::Mat in2[] = { empty_channel, spl[1], empty_image };
int from_to2[] = { 0,0, 1,1, 2,2 };
mixChannels(in2, 3, &result_green, 1, from_to2, 3);
// Create red channel
cv::Mat in3[] = { empty_channel, empty_channel, spl[2]};
int from_to3[] = { 0,0, 1,1, 2,2 };
mixChannels(in3, 3, &result_red, 1, from_to3, 3);
imshow("blue channel",result_blue);
imshow("green channel",result_green);
imshow("red channel",result_red);
cv::waitKey(0);
return 0;
}
может быть, это может помочь: http://stackoverflow.com/a/7903042/3702797 – Kaiido
возможно дубликат [OpenCV получить значение пикселя канала от Mat изображения] (http://stackoverflow.com/questions/7899108/opencv-get-pixel-channel-value-from-mat-image) – Kiran
@Kiran, не уверен, что это действительно обман, вопрос здесь * также * о преобразовании его в YCbCr вручную, а не только о получении пиксельного канала – Kaiido