Получение значений Y и Cb, Cr кадра в openCV C++
Я пишу код, который использует openCV, вот мой вопрос, кадр в openCV находится в цветовом пространстве RGB, но мне нужно это в формате YCbCr, поэтому я использовал, я написал этот небольшой код:
void PixelError::conversiontoYcbcr(cv::Mat rgbFrame){
cv::cvtColor(rgbFrame,frameycbcr, CV_RGB2YCrCb,0);
cv::Vec3f pixel = frameycbcr.at<cv::Vec3f>(row,col);
}
это был пример для получения значений R и G и B, но поскольку я конвертировал кадр, я тоже прыгал, чтобы получить свои значения, но я получил ошибку в строках и столбцах, и я не знаю, какой канал векторного пикселя представляет мой Значения Y или Cb или CR. Заранее спасибо за помощь
1 ответ
Решение
Если ваше входное RGB-изображение использует 8 бит на канал, результат cvtColor также будет иметь тип CV_8UC3. Таким образом, вы должны получить свой пиксель как cv::Vec3b примерно так:
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
cv::Mat rgb(4, 3, CV_8UC3, cv::Scalar(255, 127, 63));
cv::Mat ycbcr;
cv::cvtColor(rgb, ycbcr, CV_RGB2YCrCb, 0);
for (int row(0); row < ycbcr.rows; ++row)
{
for (int col(0); col < ycbcr.cols; ++col)
{
cv::Vec3f pixel = ycbcr.at<cv::Vec3b>(row, col);
std::cout << "row: " << row << "; col: " << col << "; Y: " << pixel[0] << "; Cr: " << pixel[1] << "; Cb: " << pixel[2] << std::endl;
}
}
}