2

O'Reillyシリーズの「LearningOpenCV」という本を読んでいて、キャニーエッジ検出サンプルを実行しようとしています。

私が選択したグレースケール画像は3チャンネルであるように見えますが、私の知る限り、cannyはシングルチャンネル画像でしか機能しないため、これは常に失敗します。OpenCVが提供する画像も使用しています。

これが私のコードです。

IplImage* doCanny(IplImage* in, double lowThresh, double highThresh, double aperture)
{
    if(in->nChannels != 1)
        return(0); //canny only handles gray scale images
    IplImage* out = cvCreateImage(cvSize(in->width, in->height), IPL_DEPTH_8U, 1);
    cvCanny(in, out, lowThresh, highThresh, aperture);
    return(out);
};

IplImage* img = cvLoadImage("someGrayscaleImage.jpg");
IplImage* out = doCanny(img, 10, 100, 3);

なぜこれで常に3チャンネルの画像が得られるのでしょうか。どうすればこれを解決できますか?

4

1 に答える 1

2

このメソッドは別のパラメーターで使用できます

IplImage* cvLoadImage(const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR)

#define CV_LOAD_IMAGE_COLOR       1

#define CV_LOAD_IMAGE_GRAYSCALE   0

#define CV_LOAD_IMAGE_UNCHANGED  -1

デフォルトのパラメータは、カラー付きの画像の読み込みです。あなたがしなければならないのは、グレースケールでそれをロードすることです

これが例です

cvLoadImage("yourimage.jpg", CV_LOAD_IMAGE_GRAYSCALE);

その方法の詳細な説明は次のとおりです。詳細については、こちらをご覧ください: Open CV 2.0 References

scolor –ロードされた画像の特定のカラータイプ:$> 0 $の場合、ロードされた画像は強制的に3チャンネルのカラー画像になります。0の場合、ロードされた画像は強制的にグレースケールになります。$ <0 $の場合、ロードされた画像はそのままロードされます(現在の実装では、アルファチャネルがある場合は、出力イメージから削除されます。たとえば、4チャネルRGBAイメージはRGBとしてロードされます)。

于 2010-05-10T02:15:03.407 に答える