0

これで 2 と 3 は何を意味し、どのように変更できますか?

CvMat* rot = cvCreateMat(2,3,CV_32FC1) 

これら 2 つの値を変更すると、openCV GUI エラー ハンドラーが表示されます。

入力引数のサイズが一致しません()

関数内 cvConvertScale.\cxconvert.cpp(1601)

それが何を意味するのか理解したい

アップデート:

コードは次のとおりです。

#include <cv.h>
#include <highgui.h>
int main()
{
    CvMat* rot = cvCreateMat(2,3,CV_32FC1);
    IplImage *src, *dst;
    src=cvLoadImage("doda.jpg");
//  make acopy of gray image(src)
    dst = cvCloneImage( src );
    dst->origin = src->origin;
// make dstof zeros 
    cvZero( dst );
// Compute rotation matrix
    double x=0.0;
// loop to get rotation from 0 to 360 by 4 press on anykey
    for(int i=1;i<=5;i++)
    {
        CvPoint2D32f center = cvPoint2D32f(src->width/2,src->height/2);
        double angle = 0+x;
        double scale = 0.6;
        cv2DRotationMatrix( center, angle, scale, rot );
// Do the transformation
        cvWarpAffine( src, dst, rot);
        cvNamedWindow( "Affine_Transform", 1 );
        cvShowImage( "Affine_Transform", dst );
        if (i<=4)
            x=x+90.0;
        else
            x=0.0;
        cvWaitKey();
    }
    cvReleaseImage( &dst );
    cvReleaseMat( &rot );
    return 0;
}
4

3 に答える 3

0

2x3 以外の形状を使用するとエラーが発生します。これはrot、回転に使用するときに opencv にとって意味がないためです。

ジェイコブの答えを見てください。
彼は、回転行列のコンポーネントについて詳しく説明しています。

于 2012-11-06T11:46:25.050 に答える
0

2 と 3 は、作成している行列の行数と列数です。

OpenCVを使ったプログラミングの紹介から:

行列を割り当てます。

CvMat* cvCreateMat(int rows, int cols, int type);

type: 行列要素のタイプ。フォームで指定します CV_<bit_depth>(S|U|F)C<number_of_channels>。例:CV_8UC1は 8 ビットの符号なしシングル チャネル マトリックスをCV_32SC2意味し、2 つのチャネルを持つ 32 ビットの符号付きマトリックスを意味します。

例:

 CvMat* M = cvCreateMat(4,4,CV_32FC1);

それらを変更するのは、異なる値を代入するのと同じくらい簡単です。でも、それはもうわかっているはずです。

于 2009-10-09T10:13:59.137 に答える
0

2 = 行数と 3 = 行列の列数rot

コード全体を投稿できますか? または、達成したいことを教えてください。画像を回転しようとしていますか?

また、 C++ インターフェイスを持つOpenCV 2.0にアップグレードすることをお勧めします。新しいバージョンでは、すべて (行列、画像など) を処理し、物事をより単純にする Mat クラスを広範に使用できます。

于 2009-10-09T14:04:15.197 に答える