2011-12-22 87 views
2

perspectiveTransformの使い方は?opencv perspectiveTransform関数の例外

私のコードを実行すると、次の例外を生成します:

私を助けることができる

OpenCV Error: Assertion failed (scn + 1 == m.cols && (depth == CV_32F || depth == CV_64F)) in perspectiveTransform, file /Users/donbe/Documents/opencv/opencv/modules/core/src/matmul.cpp, line 1916

は?

以下の私のコード:

Point2f srcTri[4]; 
Point2f dstTri[4]; 

Mat warp_mat; 
Mat src; 

/// Load the image 
src = imread(argv[1], 1); 

srcTri[0] = Point2f(0,0); 
srcTri[1] = Point2f(src.cols,0); 
srcTri[2] = Point2f(src.cols,src.rows); 
srcTri[3] = Point2f(0,src.rows); 

dstTri[0] = Point2f(0,0); 
dstTri[1] = Point2f(src.cols/2,0); 
dstTri[2] = Point2f(src.cols/2,src.rows); 
dstTri[3] = Point2f(0,src.rows); 


warp_mat = getPerspectiveTransform(srcTri, dstTri); 

Mat warp_dst(src.size(), src.type());  

//There will produce a exception. 
perspectiveTransform(src, warp_dst, warp_mat); 

namedWindow("Warp", CV_WINDOW_AUTOSIZE); 
imshow("Warp", warp_dst); 

waitKey(0); 
return 0; 

答えて

3

は、あなたがそれが要件をチェックすることをあなたの元画像を確認しましたか?

void perspectiveTransform(InputArray src, OutputArray dst, InputArray mtx) 

Parameters: 

src – Source two-channel or three-channel floating-point array. Each element is a 2D/3D vector to be transformed. 
dst – Destination array of the same size and type as src . 
mtx – 3x3 or 4x4 floating-point transformation matrix. 

機能は、2Dまたは3Dベクトルのまばらなセットを変換します。透視変換を使用してイメージを変換する場合は、warpPerspective()を使用します。

詳細についてはマニュアルを参照してください:http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=perspectivetransform#cv2.perspectiveTransform

は、この情報がお役に立てば幸いです。

+0

ありがとうございました。できます。 – user432653

1

私の場合、同じエラーが発生していて、InputArray mtxのタイプに問題がありました。 CV_8UC1の代わりにCvMat * objのタイプをCV_32FC1に変更した後で解決しました!