opencv_将图像上的4个点按逆时针排序

介绍了一段OpenCV的代码,用于将图像上的四个点按照逆时针顺序进行排序。提供了代码示例和运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

opencv_将图像上的4个点按逆时针排序

1:代码如下:

#include "stdafx.h"
#include "cxcore.h"
#include "cvcam.h"
#include "windows.h"
#include "cv.h"
#include "highgui.h"
#include "iostream"
using namespace std;
CvMat* RankPoint(CvMat* p);
/*输出矩阵*/
void PrintMat2(CvMat*target, char * name)//第一个参数为cvMat矩阵指针,第二个参数为输出的矩阵的名字
{
    printf("%s:\n", name);
    for (int i=0; i<target->rows; i++)
    {
        for (int j=0; j<target->cols;j++)
        {
            printf("%f\t", cvmGet(target, i,j));
        }
        printf("\n");
    }
}
CvMat* RankPoint(CvMat* p)
{
    CvMat* p_dst=cvCreateMat(3,4,CV_32FC1);//图像上点的矩阵,竖着依次为u,v,1
    double a[2][4];
    a[0][0]=cvmGet(p,0,0); a[0][1]=cvmGet(p,0,1); a[0][2]=cvmGet(p,0,2); a[0][3]=cvmGet(p,0,3);
    a[1][0]=cvmGet(p,1,0); a[1][1]=cvmGet(p,1,1); a[1][2]=cvmGet(p,1,2); a[1][3]=cvmGet(p,
如果你想要确保角坐标不会按照逆时针顺序排列,通常在计算轮廓线特征如SIFT、SURF或Harris角时,你可以先按照某种规则对角进行排序,比如顺时针方向。这可以通过比较相邻两个角之间的向量方向来实现。 以下是一个简单的步骤: 1. 对于每个角,获取其与其相邻的两个角的向量(可以看作连接两个的线段)。 2. 计算这两个向量的方向差,例如使用它们的夹角或叉积判断方向。 3. 如果方向差为正(通常是顺时针),保留这个角;如果为负(逆时针),则跳过它,或者将其标记为无效角4. 如果所有邻接角都按照你的预期方向,就保持当前顺序;如果不是,则可能需要调整它们的位置,但通常这种情况下算法会自动忽略这种罕见的情况。 由于你提到的是基于轮廓线的处理,具体的编程语言可能会有所不同,但在Python中,你可以用OpenCV库来操作图像并计算角方向。这里不是一个完整的代码示例,但提供了一个基本思路: ```python import cv2 import numpy as np # ... (之前的轮廓检测代码) # 获取角列表 corners = ... # 初始化一个新的有序角列表 sorted_corners = [] for corner in corners: # 获取相邻角 neighbor1, neighbor2 = ... # 根据轮廓结构查找邻居 # 计算向量并检查方向 vec1 = neighbor1 - corner vec2 = neighbor2 - corner angle_diff = np.cross(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2)) # 或者直接计算夹角 if angle_diff > 0: # 如果是顺时针方向 sorted_corners.append(corner) # ... (后续处理或保存排序后的角) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值