Android 图像旋转一定角度后计算新坐标

Android 图像旋转一定角度后计算新坐标,android,opencv,Android,Opencv,大家好 我是Android的新手。我在一个应用程序上做了大量的工作,它可以捕捉图像的边缘并对其进行操作。我在我的图片上画了一个多边形的形状,它是用我从OpenCV中获得的坐标捕捉到的。除非我旋转它,否则一切都正常。当我旋转时,我还希望移动绘制的坐标,如图所示。如果我旋转到90度,那么我需要根据新的角度计算坐标,并相应地绘制边界。我有第一个屏幕截图所有坐标的中心。以下是相同的代码: private PointF getCenter(HashMap<Integer, PointF> po

大家好

我是Android的新手。我在一个应用程序上做了大量的工作,它可以捕捉图像的边缘并对其进行操作。我在我的图片上画了一个多边形的形状,它是用我从OpenCV中获得的坐标捕捉到的。除非我旋转它,否则一切都正常。当我旋转时,我还希望移动绘制的坐标,如图所示。如果我旋转到90度,那么我需要根据新的角度计算坐标,并相应地绘制边界。我有第一个屏幕截图所有坐标的中心。以下是相同的代码:

private PointF getCenter(HashMap<Integer, PointF> points){
    PointF centerPoint = new PointF();
    int size = points.size();
    for(Integer i : points.keySet()){
        PointF p = points.get(i);
        centerPoint.x += p.x / size;
        centerPoint.y += p.y / size;
    }
    Log.d(TAG, " centerPoint.x "+centerPoint.x);
    Log.d(TAG, " centerPoint.y "+centerPoint.y);
    return centerPoint;
}  
私有点f getCenter(HashMap点){ PointF centerPoint=新的PointF(); int size=points.size(); 对于(整数i:points.keySet()){ 点F p=点。获取(i); 中心点x+=p.x/尺寸; 中心点y+=p.y/尺寸; } Log.d(标签“centerPoint.x”+centerPoint.x); Log.d(标记“centerPoint.y”+centerPoint.y); 返回中心点; } 但是我被困在这里,不知道如何计算旋转图像的新坐标。我的数学也不好。请帮帮我。我把它旋转90度

我从OpenCV获得的第一个图像和我想要实现的第二个图像

问候,,
Munish

只需将坐标乘以旋转矩阵R(这显然取决于角度):


我认为这是在OpenCV中,但您可以轻松地编写R

嗨Carlos,下面是我用来旋转矩阵的代码:矩阵矩阵=新矩阵();矩阵。后旋转(getDegree());位图旋转=Bitmap.createBitmap(位图,0,0,Bitmap.getWidth(),Bitmap.getHeight(),矩阵,true);我知道学位(可以是90度或任何其他)。我有旧坐标,你们可以在图中看到。我有八个坐标(x1y1,x2y2,x3y3,x4y4)。你想让我把这些和角度相乘吗?如果旋转90度,你能帮我计算旋转矩阵吗。我数学不好。如果你得了8分,那么你必须应用我说的8次<代码>新的×1=cos(θ)*旧的×1-sin(θ)*旧的×1
new_y1=sin(θ)*old_x1+cos(θ)*old_y1
等等。维基百科在“二维”一节中对此做了很好的解释。如果这对您有帮助,请将答案标记为correchi Carlos,正如您所说,我已经应用了公式:x0=(float)((Math.cos(Math.toRadians(90))*point0.x)-(Math.sin(Math.toRadians(90))*point0.y));y0=(float)((Math.sin(Math.toRadians(90))*point0.x)+(Math.cos(Math.toRadians(90))*point0.y));剩下的坐标我都做了,但是我没有得到输出。我做错什么了吗。请帮助旧坐标:{1=PointF(663.0245.0),0=PointF(96.0339.0),3=PointF(641.0625.0),2=PointF(87.0588.0)}90度旋转后的新坐标:{1=PointF(-245.0663.0),0=PointF(-339.0,96.0),3=PointF(-625.0641.0),2=PointF(-588.0,87.0)}
new_coords = R*old_coords