3

反時計回りに90度回転させたいのですが、回転点が間違っているようです。ソース画像の回転中心を見つけるにはどうすればよいですか?

    img=cvLoadImage(argv[1],-1); 
height    = img->height;
width     = img->width;
step      = img->widthStep;
channels  = img->nChannels;
data      = (uchar *)img->imageData;

    IplImage *rotatedImg = cvCreateImage(cvSize(height,width), IPL_DEPTH_8U,img->nChannels);

    CvPoint2D32f center;
    center.x = width/2;
    center.y = height/2;
    CvMat *mapMatrix = cvCreateMat( 2, 3, CV_32FC1 );

    cv2DRotationMatrix(center, 90, 1.0, mapMatrix);
    cvWarpAffine(img, rotatedImg, mapMatrix, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS, cvScalarAll(0));


cvShowImage("My image", rotatedImg );
4

1 に答える 1

1

アフィン変換行列の変換パラメータを設定する必要があります。

画像を 90 度回転し、出力を目的の画像に合わせるには、次の操作を実行できます。

IplImage *rotatedImg = cvCreateImage(cvSize(height,width), IPL_DEPTH_8U,img->nChannels);

CvPoint2D32f center;
center.x = width/2.0f;
center.y = height/2.0f;
CvMat *mapMatrix = cvCreateMat( 2, 3, CV_32FC1 );

float x = width - 1.0f;
float y = 0.0f;

cv2DRotationMatrix(center, 90, 1, mapMatrix);
cvmSet(mapMatrix,0,2,y);
cvmSet(mapMatrix,1,2,x);
cvWarpAffine(img, rotatedImg, mapMatrix, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS, cvScalarAll(0));

オフセット値 x と y に注意してください。これらの値は、出力イメージ サイズに従って結果を調整します。

PS: これは一般的な解決策ではありません。90度回転専用です。

于 2012-12-15T17:01:40.673 に答える