加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 从OpenCV中旋转的图像旋转后点

发布时间:2020-12-16 05:19:30 所属栏目:百科 来源:网络整理
导读:我有旋转烦恼. 我想做的是这样的: 旋转图像 检测旋转图像上的特征(点) 旋转点,使我可以拥有对应于初始图像的点坐标 我有点困在第三步. 我设法用下面的代码旋转图像: cv::Mat M(2,3,CV_32FC1);cv::Point2f center((float)dst_img.rows / 2.0f,(float)dst_im
我有旋转烦恼.
我想做的是这样的:

>旋转图像
>检测旋转图像上的特征(点)
>旋转点,使我可以拥有对应于初始图像的点坐标

我有点困在第三步.

我设法用下面的代码旋转图像:

cv::Mat M(2,3,CV_32FC1);
cv::Point2f center((float)dst_img.rows / 2.0f,(float)dst_img.cols / 2.0f);
M = cv::getRotationMatrix2D(center,rotateAngle,1.0);
cv::warpAffine(dst_img,rotated,M,cv::Size(rotated.cols,rotated.rows));

我尝试用这个代码回转点:

float xp = r.x * std::cos( PI * (-rotateAngle) / 180 ) - r.y * sin(PI * (rotateAngle) / 180);
float yp = r.x * sin(PI * (-rotateAngle) / 180) + r.y * cos(PI * (rotateAngle) / 180);

这是不值得的工作,但点不会恢复良好的形象.有一个偏移.

感谢您的帮助

解决方法

如果M是从cv :: getRotationMatrix2D得到的旋转矩阵,可以使用此矩阵旋转cv :: Point p,您可以执行以下操作:
cv::Point result;
result.x = M.at<double>(0,0)*p.x + M.at<double>(0,1)*p.y + M.at<double>(0,2);
result.y = M.at<double>(1,0)*p.x + M.at<double>(1,1)*p.y + M.at<double>(1,2);

如果要旋转一个点,则生成M的逆矩阵,或者使用cv :: getRotationMatrix2D(center,-rotateAngle,scale)生成反向旋转矩阵.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读