gpt4 book ai didi

c - C中图像旋转的openCV中心

转载 作者:太空宇宙 更新时间:2023-11-03 21:12:30 25 4
gpt4 key购买 nike

我想逆时针旋转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 );

最佳答案

您必须设置仿射变换矩阵的平移参数。

要将图像旋转 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。这些值根据输出图像大小调整结果。

附言:这不是一个通用的解决方案。仅适用于旋转 90 度。

关于c - C中图像旋转的openCV中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13892279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com