0

こんにちは、C++ openCV 2.4.5 を使用して、画像内のピクセルの RGB を取得しようとしています。

しかし、コンパイル時にこのエラーが発生します。

画像をロードしますが、ピクセルのRGBを取得しようとすると例外が発生します

誰でも私を助けてくれますか?

ここに画像の説明を入力

次のコードは、画像を読み込み、インデックス 25,4 のピクセルの RGB を見つけます
。私のコードは次のとおりです。

 #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv/cv.h>
    #include <opencv/highgui.h>
    #include <iostream>
    using namespace std;
    using namespace cv;
    int main()
    {
        int x;
        Mat input = imread("C:/red.jpg");
        if (input.empty())
            {
                std::cout << "!!! Failed imread(): image not found" << std::endl;
                cin>>x;
                return 0;
                // don't let the execution continue, else imshow() will crash.
            }
        imshow("input", input);
         Vec3f pixel = input.at<Vec3f>(25, 40);
         if( !pixel[0])
         {
             std::cout << "!!! Failed pixel(): image not found" << std::endl;
                cin>>x;
                return 0;
         }
            int b = pixel[0];
            int g = pixel[1];
            int r = pixel[2];
        cout<<b;
        cout <<" ";
        cout<<r;
        cout <<" ";
        cout <<g;
        cin>>b;

        /*




        // detect squares after filtering...
        */
        return 0;
    }
4

2 に答える 2

3

画像はおそらく CV_8UC3 型です。これは、ピクセルの値が 3 チャネル 8 ビット uchar として格納されることを意味します。の

Vec3f pixel = input.at<Vec3f>(25, 40);

Vec3fOpenCVでは として定義されているため、ピクセル値に float としてアクセスしようとしていますtypedef Vec<float, 3> Vec3f;。これにより、プログラムがクラッシュします。代わりに、次のようにする必要があります。

Vec3b pixel = input.at<Vec3b>(25, 40);

OpenCVVec3bでは として定義されておりtypedef Vec<uchar, 3> Vec3b;、これが必要です。

cv:: Vecデータ型のドキュメントは次のとおりです。

EDITで簡単にピクセルデータを出力できます

cout << pixel << endl;

またはこのように:

printf("[%u, %u, %u]", pixel[0], pixel[1], pixel[2]);

またはこのように:

int b = static_cast<int>(pixel[0]);
int g = static_cast<int>(pixel[1]);
int r = static_cast<int>(pixel[2]);
cout<< "[" << b <<", " << g << ", " << r << "]" << endl;
于 2013-05-09T14:44:26.307 に答える
0

あなたが使用する必要があります:

Mat input = imread("C://red.jpg");

それ以外の :

Mat input = imread("C:/red.jpg");
于 2015-09-17T10:37:55.157 に答える