opencv 两点之间角度 与倾斜校正应用

转自:http://blog.csdn.net/u012767067/article/details/19402239

以下代码返回的角度范围是0-360

/************************************************************************
*函数名:        get_point_angle
*
*函数作用:      已知2个坐标点,求从 0------->x 逆时针需旋转多少角度到该位置
*
*                   |
*                   |
*                   |
*                   |
*------------------------------------> x
*                   | 0
*                   |
*                   |
*                   |
*                   v
*                   y
*
*函数参数:
*CvPoint2D32f pointO  - 起点
*CvPoint2D32f pointA  - 终点
*
*函数返回值:
*double         向量OA,从 0------->x 逆时针需旋转多少角度到该位置
**************************************************************************/
double get_point_angle(CvPoint pointO,CvPoint pointA)
{
    double angle = 0;
    CvPoint point;
    double temp;

    point = cvPoint((pointA.x - pointO.x), (pointA.y - pointO.y));

    if ((0==point.x) && (0==point.y))
    {
        return 0;
    }

    if (0==point.x)
    {
        angle = 90;
        return angle;
    }

    if (0==point.y)
    {
        angle = 0;
        return angle;
    }

    temp = fabsf(float(point.y)/float(point.x));
    temp = atan(temp);
    temp = temp*180/CV_PI ;

    if ((0<point.x)&&(0<point.y))
    {
        angle = 360 - temp;
        return angle;
    }

    if ((0>point.x)&&(0<point.y))
    {
        angle = 360 - (180 - temp);
        return angle;
    }

    if ((0<point.x)&&(0>point.y))
    {
        angle = temp;
        return angle;
    }

    if ((0>point.x)&&(0>point.y))
    {
        angle = 180 - temp;
        return angle;
    }

    printf("sceneDrawing :: getAngle error!");
    return -1;
}

 

根据倾斜角度倾斜校正应用

https://blog.csdn.net/yang332233/article/details/115217635

在 C# 中使用 OpenCV 进行图像倾斜校正是为了纠正拍摄过程中由于相机移动、抖动或不平整表面造成的图片偏移。OpenCV 提供了丰富的图像处理功能,包括对齐工具,可以应用于图像稳定性和增强现实应用。 要对图像进行倾斜校正,通常会通过以下步骤: 1. **检测特征**:使用 SIFT (Scale-Invariant Feature Transform) 或 SURF (Speeded Up Robust Features) 等特征检测算法找到图像中的关键,这些对于对齐至关重要。 2. **计算 Homography**:利用特征匹配找到对应对,然后计算这两个视图之间的Homography矩阵,这是描述两个图像如何变换才能使它们完全重叠的数学表示。 3. **应用变换**:将 Homography 应用于源图像的每个像素坐标上,通过逆投影将其映射到正确的对齐位置。 4. **图像缝合**:如果有多张图片需要校正,可能会用到 RANSAC (Random Sample Consensus) 算法来排除异常,然后合并结果。 以下是一个简化的示例代码片段: ```csharp using Emgu.CV; using Emgu.CV.CvEnum; using System; public Mat CorrectImageRotation(Mat src, Point2f[] corners) { // 计算 Homography PointF[] dstCorners = new PointF[corners.Length]; for (int i = 0; i < corners.Length; i++) dstCorners[i] = new PointF(corners[i].X, src.Rows - corners[i].Y); // 上下颠倒是因为OpenCV的坐标系 Mat homography = FindHomography(src.QueryPoints(corners), src.QueryPoints(dstCorners)); // 应用 Homography 进行旋转校正 Mat alignedImage = cv2.warpPerspective(src, homography, src.Size()); return alignedImage; } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值