【问题标题】:Getting the Y and Cb , Cr values of a frame in openCV c++在openCV c ++中获取帧的 Y 和 Cb , Cr 值
【发布时间】:2012-12-10 10:24:46
【问题描述】:

我正在编写一个使用 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 值。 提前感谢您的帮助

【问题讨论】:

    标签: c++ opencv


    【解决方案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;
            }
        }
    }
    

    【讨论】:

    • 感谢 Dobi 能用,但这不是我需要的,我需要帧上每个像素的值
    • 好的,我已经根据您的评论编辑了我的答案。现在每个像素值都被打印出来了。
    • 非常感谢您的帮助,我尝试使用您的旧版本并打印每个像素的像素值。但这个版本更好。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 2013-05-08
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2013-09-12
    相关资源
    最近更新 更多