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 の値を取得する例ですが、フレームを変換してから値を取得するためにホッピングしていましたが、行と列でエラーが発生し、ベクトル ピクセルのどのチャネルが自分の値を表しているかわかりません。 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 に答える