我在轮换方面遇到麻烦。
我想做的是这样的:

  • 旋转图像
  • 检测旋转图像上的特征(点)
  • 旋转点,以便我可以拥有与初始图像
  • 相对应的点坐标

    我在第三步上有些卡住。

    我设法用以下代码旋转图像:
    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)生成用于反向旋转的矩阵。

    关于c++ - 在OpenCV中从旋转的图像旋转回点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6864994/

    10-11 00:35
    查看更多