1

我正在编写一个使用 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 值的示例,但是由于我转换了帧,所以我也跳到了我的值,但是我在 row 和 col 中遇到了错误,我不知道矢量像素的哪个通道代表我的Y 或 Cb 或 CR 值。在此先感谢您的帮助

4

1 回答 1

2

如果您的输入 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;
        }
    }
}
于 2012-12-10T11:10:33.800 回答