在OpenCv中计算缩放后的Mat图像上点的坐标

5

如果我有一个大小为960*720的 Mat 图像对象(OpenCV),我已经计算出了一个 Point 对象的坐标,然后我对这个 Mat 图像进行了缩放,它的新尺寸是640*480,那么我该如何找到 Point 的新坐标呢?

2个回答

1

原矩阵中的点 (x,y) 将被映射到新矩阵中的 (x',y'),其规则如下:

(x',y') = 2*(x,y)/3.

将其转化为OpenCV函数,我们有以下代码:

cv::Point scale_point(cv::Point p) // p is location in 960*720 Mat
{
    return 2 * p / 3;   // return location in 640*480 Mat
}

尽管这个答案在概念上回答了问题,但它并没有在OpenCV的上下文中解决问题。 - Dale

0
我最后做的是创建了一个扩展了Point的ScaledPoint对象。这样,对于我已经在使用的只有普通Point对象的代码来说,它的影响较小。
public class ScaledPoint extends Point {
    public ScaledPoint (double[] points, double scale) {
        super(points[0] * scale, points[1] * scale);
    }
}

然后,我计算了一个缩放因子,并在我扩展的类中使用它:

Mat originalObject; 
// TODO: populate the original object
Mat scaledObject; 
// TODO: populate the scaled object
double scaleFactor = scaledObject.getHeight()/(double)originalObject.getHeight();
matOfSomePoints = new Mat(4,1, CvType.CV_23FC2);
// TODO: populate the above matrix with your points
Point aPointForTheUnscaledImage = new Point(matOfSomePoints.get(0,0));
Point aPointForTheScaledImage = new ScaledPoint(matOfSomePoints.get(0,0), scaleFactor);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接