1

私はvs2010(Cでコーディング)でOpenCV2.1を使用しています。rgb画像から青い平面を抽出した後、それにdctを適用して、変換された行列を取得しました。

cvDCT(source,destination,CV_DXT_FORWARD);

正常に構築されていますが、どういうわけか実行されていません

エラーは、「freqDomain.exeの0x75c89617での未処理の例外:Microsoft C ++例外:メモリ位置0x001ce35cでのcv::Exception」のようなものです。

出力画像のcvarrayの種類の設定に誤りがあると思います。IPL_DEPTH_8Uに設定しても大丈夫ですか、それともフロートにする必要がありますか?

これは私のコードスニペットです:

int main()
{
    IplImage *input,*output,*b,*g,*r;
    input=cvLoadImage("dolphin.jpg");
    int width,height;
    width=input->width;
    height=input->height;
    b=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
    g=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
    r=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
    cvSplit(input,b,g,r,NULL);
    cvNamedWindow("blue",CV_WINDOW_AUTOSIZE);
    IplImage *b_dct,*g_dct,*r_dct;
    b_dct=cvCreateImage(cvSize(width,height),8,1);
    g_dct=cvCreateImage(cvSize(width,height),8,1);
    r_dct=cvCreateImage(cvSize(width,height),8,1);
    cvDCT(b,b_dct,0);  // doubt??
    cvShowImage("blue",b_dct);

    ...
4

1 に答える 1

1

ええ、解決策を見つけました:)問題はソース画像のデータ型にありました。floatまたはdoubleである必要があります。cvConvert関数を使用して、unsignedintから32ビットのfloat値に変換しました。

于 2012-06-04T09:48:03.620 に答える