OpenCV:找到旋转点的原始坐标
OpenCV: Find original coordinates of a rotated point
我有以下问题。我正在使用HaarClassifiers搜索图像中的眼睛。由于头部的旋转,我试图在不同的角度找到眼睛。为此,我以不同的角度旋转图像。为了旋转框架,我使用以下代码(用c++编写):
Point2i rotCenter;
rotCenter.x = scaledFrame.cols / 2;
rotCenter.y = scaledFrame.rows / 2;
Mat rotationMatrix = getRotationMatrix2D(rotCenter, angle, 1);
warpAffine(scaledFrame, scaledFrame, rotationMatrix, Size(scaledFrame.cols, scaledFrame.rows));
这工作得很好,我能够为眼睛提取两个ROI矩形。所以,我有每个ROI的上/左坐标以及它们的宽度和高度。然而,这些坐标是旋转图像中的坐标。我不知道怎么把这个矩形投影到原来的框架上。
假设我有未缩放帧(full_image)的眼睛对,但仍然旋转。
eye0_roi and eye1_roi
我如何将它们旋转回来,使它们映射到正确的位置?
最诚挚的问候,安德烈
您可以使用invertAffineTransform
获得逆矩阵并使用该矩阵将点旋转回来:
Mat RotateImg(const Mat& img, double angle, Mat& invertMat)
{
Point center = Point( img.cols/2, img.rows/2);
double scale = 1;
Mat warpMat = getRotationMatrix2D( center, angle, scale );
Mat dst = Mat(img.size(), CV_8U, Scalar(128));
warpAffine( img, dst, warpMat, img.size(), 1, 0, Scalar(255, 255, 255));
invertAffineTransform(warpMat, invertMat);
return dst;
}
Point RotateBackPoint(const Point& dstPoint, const Mat& invertMat)
{
cv::Point orgPoint;
orgPoint.x = invertMat.at<double>(0,0)*dstPoint.x + invertMat.at<double>(0,1)*dstPoint.y + invertMat.at<double>(0,2);
orgPoint.y = invertMat.at<double>(1,0)*dstPoint.x + invertMat.at<double>(1,1)*dstPoint.y + invertMat.at<double>(1,2);
return orgPoint;
}
相关文章:
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 将浮动的heightmap数组导出为16位原始值
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 如何将原始字节附加到 std::vector?
- 从堆栈分配的原始指针构造智能指针
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 将unique_ptr分配给原始指针
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- 从原始字节解码协议缓冲区(以 C++为单位)
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- X和Y坐标来自带有原始输入的Precision触摸板
- 从扭曲的图像返回到原始坐标
- OpenCV:找到旋转点的原始坐标