#include<iostream>
#include<opencv2/opencv.hpp>
#include<vector>
#include<stdlib.h>
#include <time.h>
using namespace std;
using namespace cv;
//此函数随机选取两点,求基础线的法线参数及一个选取点参数(得到的参数用于ransac计算内点)
void BasicLineParam(vector<Point> & data, vector<double> & param)
{
Point p1 = (0, 0), p2 = (0, 0);
//srand((unsigned)time(NULL)); //不能这样选取随机数,因为要迭代,速度太快了,时间基本没有改变,每次选出来的随机数是一样的。
while (p1 == p2) //保证选取的是两个不同的点
{
p1 = data[rand() % data.size()];
p2 = data[rand() % data.size()];
}
cout <<"选取的两个点" <<endl << p1<< endl;
cout << p2 << endl;
double nx = p1.y - p2.y;
double ny = p2.x - p1.x;// 原始直线的斜率为K,则法线的斜率为-1/k
double norm = sqrt(nx*nx + ny*ny);
param.push_back(nx / norm);
param.push_back(ny / norm);
param.push_back(p1.x);
param.push_back(p1.y);
cout << "直线的法线向量 (" << param[0] <<
ransac改进
最新推荐文章于 2024-10-17 19:00:00 发布