0

私は C++ が初めてで、500x500 ピクセルの RGB イメージを作成しようとしています。画像は、それぞれがコーナーの 1 つに対して定義された 4 つの色の線形補間によって塗りつぶされる必要があるため、次のようなものが必要です。

Vec3b ul( 255, 0, 0 ); //upper left corner
Vec3b ur( 0, 255, 0 ); //upper right corner
Vec3b bl( 0, 0, 255 ); //bottom left corner
Vec3b br( 255, 0, 255 ); //bottom right corner

最終結果は次のようになります。

ここに画像の説明を入力

次に、プログラムは画像をウィンドウなどに表示します...私はそれを行うことができますが、画像に色を入れる方法を理解する必要があります。これまでの私のコードは次のとおりです。

#include <QtCore/QCoreApplication>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <iostream>
#include <string>
#include <sys/stat.h>

using namespace cv;
int main()
{

    Mat image;
    image.create( 500, 500, CV_8UC3);
    //upper left corner
    Vec3b ul( 255, 0, 0 );
    //upper right corner
    Vec3b ur( 0, 255, 0 );
    //bottom left corner
    Vec3b bl( 0, 0, 255 );
    //bottom right corner
    Vec3b br( 255, 0, 255 );

    namedWindow("Colored Pixels");
    imshow("Colored Pixels", image);
    // shows image for 5 seconds
    waitKey(5000);
    return 0;
}

そして出力は

ここに画像の説明を入力

あなたの提案を聞いてうれしいです!

4

1 に答える 1

1

あなたが本当に求めているのは、「画像を表す OpenCV Mat インスタンスの要素を設定するにはどうすればよいですか?」ということのようです。少しグーグルすると、このリンクが作成され、Mat インターフェースが文書化されます。次のシグネチャを持つ関数が含まれています。

template _Tp& Mat::at(int i, int j)

したがって、image.at(100,250) のような呼び出しを行って、100,250 のピクセルのピクセル データへの参照を取得できるはずです。次に、ピクセル データをピクセルに割り当てます。

マトリックスが理解する形式でピクセルデータを割り当てる方法については...以下も上記のリンクからのものです:

OpenCV CvMat の型表記 CV_8U ... CV_32FC3、CV_64FC2 などに精通している場合、プリミティブ型は、フォーム CV_ で一意の識別子を指定できる型として定義できます。 {U|S|F}C . このようなプリミティブ データ型の単一のインスタンスを格納できるユニバーサル OpenCV 構造は Vec です。

したがって、タイプ int でサイズ 3 の OpenCV Vec は互換性があるように思えます。何かのようなもの:

image.at(i,j) = Vec<int,3>(r,g,b)

探しているものにかなり近いことを願っています。

私は OpenCV を使用しておらず、このコードをテストしていないことに注意してください。これは、リンクされたドキュメントから収集したものです。

于 2012-10-11T01:08:39.650 に答える