Ну, я искал некоторые детали и не нашел ни одного примера. Поэтому я публикую функцию transposeImage
, которая, я надеюсь, поможет тем, кто ищет прямой способ поворота на 90 ° без потери данных:
IplImage* transposeImage(IplImage* image) {
IplImage *rotated = cvCreateImage(cvSize(image->height,image->width),
IPL_DEPTH_8U,image->nChannels);
CvPoint2D32f center;
float center_val = (float)((image->width)-1) / 2;
center.x = center_val;
center.y = center_val;
CvMat *mapMatrix = cvCreateMat( 2, 3, CV_32FC1 );
cv2DRotationMatrix(center, 90, 1.0, mapMatrix);
cvWarpAffine(image, rotated, mapMatrix,
CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS,
cvScalarAll(0));
cvReleaseMat(&mapMatrix);
return rotated;
}
Вопрос: зачем это?
float center_val = (float)((image->width)-1) / 2;
Ответ: Потому что это работает :) Единственный центр, который я нашел, который не переводит изображение. Хотя, если у кого-то есть объяснение, мне было бы интересно.