2011-02-10 16 views
0

学校のコンピュータで私のプログラムが動作しない理由を理解できません。おそらく、設定上の問題です。私はUbuntuの9.10で動作し、ここでOpenCV ERROR:入力引数の形式が一致しません

のOpenCV 2.2の最後のバージョンでは、コードです:

#include <stdio.h> 
#include <cv.h> 
#include <highgui.h> 



int main (int argc, char *argv[]) 
{ 
    double a[9]={1,0,-1,2,0,-2,1,0,-1}; 
    double b[9]={1,2,1,0,0,0,-1,-2,-1}; 

    IplImage* img=cvLoadImage(argv[1], 0); 
    if(!img){ 
     printf("could not load image file: %s\n",argv[1]); 
     exit(0); 
    } 

    IplImage* dst=cvCreateImage(cvGetSize(img),IPL_DEPTH_64F,1); 
    IplImage* dst1=cvCreateImage(cvGetSize(img),IPL_DEPTH_64F,1); 
    IplImage* dst2=cvCreateImage(cvGetSize(img),IPL_DEPTH_64F,1); 
    IplImage* dst_f=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1); 
    CvMat k1 = cvMat(3,3,CV_64FC1,a); 
    CvMat k2 = cvMat(3,3,CV_64FC1,b); 
    cvFilter2D(img ,dst1, &k1,cvPoint(-1,-1)); 
    cvFilter2D(img ,dst2, &k2,cvPoint(-1,-1)); 
    cvPow(dst1, dst1, 2.0); 
    cvPow(dst2, dst2, 2.0); 
    cvAdd(dst1, dst2, dst, NULL); 
    cvPow(dst, dst, 0.5); 
    cvConvertImage(dst,dst_f,CV_CVTIMG_FLIP); 
    cvThreshold(dst_f,dst_f,127,255,CV_THRESH_BINARY); 
    cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
    cvMoveWindow("mainWin", 100, 100); 
    cvShowImage("mainWin",img); 
    cvNamedWindow("Sobel", CV_WINDOW_AUTOSIZE); 
    cvShowImage("Sobel",dst_f); 
    cvWaitKey(0); 
    cvReleaseImage(&img); 
    cvReleaseImage(&dst_f); 
    return 0; 
} 

これはターミナルに戻り、問題を理解するために私を助けてください

OpenCV ERROR: Formats of input arguments do not match() in function cvFilter2D, cvfilter.cpp(2617) Terminating the application... called from cvUnregisterType, cxpersistence.cpp(4933) Terminating the application... called from cvUnregisterType, cxpersistence.cpp(4933) Terminating the application... called from cvUnregisterType, cxpersistence.cpp(4933) Terminating the application... called from cvUnregisterType, cxpersistence.cpp(4933) Terminating the application... called from cvUnregisterType, cxpersistence.cpp(4933) Terminating the application... called from cvUnregisterType, cxpersistence.cpp(4933) Terminating the application... called from cvUnregisterType, cxpersistence.cpp(4933) Terminating the application... called from cvUnregisterType, cxpersistence.cpp(4933) Terminating the application... called from cvUnregisterType, cxpersistence.cpp(4933) Terminating the application...

を実行しているときに何です。

+0

私にはOK見える - 私が提案することができる唯一のことは、など、CV_32FC1にIPL_DEPTH_32FとCV_64FC1に、フロートにIPL_DEPTH_64Fをあなたのダブルスを変更すなわち、32ビットではなく64ビットの山車使用してみてくださいです –

+0

あなたの答えPaulありがとう:) あなたが示唆したように私は深さを変更し、私は最終的な画像のためにIPL_DEPTH_8Uを維持しました!それは私の問題を解決しなかった、私は同じメッセージを得る。 – bulldo

答えて

0

あなたのエラーは、フィルタを保存してcvFilter 2Dで画像に適用するために、CvMat変数で作業する必要があります。

この手順を理解するために2つのサンプルコードを提供します。

マトリックスを作成して初期化します。

double a[] = { 1, 2, 3, 4 
       5, 6, 7, 8, 
       9, 10, 11, 12 }; 

double b[] = { 1, 5, 9, 
       2, 6, 10, 
       3, 7, 11, 
       4, 8, 12 }; 
double c[9]; 
CvMat Ma, Mb, Mc ; 

cvInitMatHeader(&Ma, 3, 4, CV_64FC1, a); 
cvInitMatHeader(&Mb, 4, 3, CV_64FC1, b); 
cvInitMatHeader(&Mc, 3, 3, CV_64FC1, c); 

cvMatMulAdd(&Ma, &Mb, 0, &Mc); 
// c array now contains product of a(3x4) and b(4x3) matrices 
0

初期

int main() 

{ れるCvMat *カーネル= 0行列に別のオプションを有するハイパスフィルタの例。 IplImage * src = cvLoadImage( "chica.jpg"); IplImage * dst = cvCreateImage(cvGetSize(src)、32,3);

kernel = cvCreateMat(3, 3,CV_32FC1); 
cvSet2D(kernel, 0, 0, cvRealScalar(0)); 
cvSet2D(kernel, 0, 1, cvRealScalar(-1)); 
cvSet2D(kernel, 0, 2, cvRealScalar(0)); 
cvSet2D(kernel, 1, 0, cvRealScalar(-1)); 
cvSet2D(kernel, 1, 1, cvRealScalar(5)); 
cvSet2D(kernel, 1, 2, cvRealScalar(-1)); 
cvSet2D(kernel, 2, 0, cvRealScalar(0)); 
cvSet2D(kernel, 2, 1, cvRealScalar(-1)); 
cvSet2D(kernel, 2, 2, cvRealScalar(0)); 

// Matriz utilizada para el filtrado paso alto 
// 0 -1 0 
// -1 5 -1 
// 0 -1 0 

cvFilter2D(src, dst, kernel, cvPoint(-1,-1)); 

cvNamedWindow("Image Original",1); 
cvShowImage("Image Original",src); 

cvNamedWindow("Image Filtrada",1); 
cvShowImage("Image Filtrada",src); 

cvWaitKey(0); 
cvReleaseImage(&src); 
cvReleaseImage(&dst); 

cvDestroyWindow("Image Original"); 
cvDestroyWindow("Image Filtrada"); 
// release the image 


return 0; 

}

関連する問題