-1

こんにちは、rgbMat として宣言されたマトリックスがあり、次のコードで回転させようとしています。

    CvMat* rot = cvCreateMat(2,3,CV_32FC1);
    CvPoint2D32f center = cvPoint2D32f(rgbMat->width/2,rgbMat->height/2); 
    double angle = 90;
    double scale = 1;
    CvMat* rot3= cv2DRotationMatrix( center, angle, scale, rot);

残念ながら、出力として 6 つの値しか得られませんが、元の rgbMat は以下に示すように 5*5 の行列であるため、25 の値を期待していました。

       {
        { 1, 1, 1, 1, 1} ,
        { 0, 0, 0, 0, 0} ,
        { 2, 2, 2, 2, 2} ,
        { 0, 0, 0, 0, 0} ,
        { 1, 1, 1, 1, 1}  } 

理由を教えてもらえますか?

4

2 に答える 2

3

まず、C API (CvMat*、cvFoo) または C++ API (Mat、Foo) のいずれかに固執します。これをクリアすると、正しい回転行列が得られます。cvWarpAffine または WarpAffine を使用して適用する必要があります。

于 2013-07-12T15:03:19.573 に答える
2

の値ではなく、回転行列の値を反復して出力しているため、6 つの値しか出力されていませんrgbMat。これを行うコードは実際には正しく、必要な出力が得られています。

従うことをお勧めする Boyko Perfanov の提案に加えて、 90 度cvTranspose()回転する を使用することもできrgbMatます。これは、あなたがやろうとしていることです。rgbMatは両方の次元で対称であるため、これが可能です。このアプローチにより、 の各要素を明示的に反復処理する必要がなくなりCvMatます。

cvTranspose(rgbMat, rgbMat);
于 2013-07-12T17:04:05.080 に答える