Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用cv::goodFeaturesToTrack拟合线_C++_Opencv_Computer Vision - Fatal编程技术网

C++ 使用cv::goodFeaturesToTrack拟合线

C++ 使用cv::goodFeaturesToTrack拟合线,c++,opencv,computer-vision,C++,Opencv,Computer Vision,我已经得到了角点,我正在尝试使用cv::fitline来拟合这些线 但我得到的线是从原点0,0开始的,如图所示 我也有投影矩阵和视图矩阵以及摄像机的intersincs参数,如果这有帮助的话 我试图计算图中盒子的体积 int main(int argc,char**argv) { 材料src、src_副本、边缘、dst; src=imread(“冻结帧_uu1508152029892.png”,0); src_copy=src.clone(); 高斯模糊(src,边缘,尺寸(5,5),1.5,

我已经得到了角点,我正在尝试使用cv::fitline来拟合这些线 但我得到的线是从原点0,0开始的,如图所示

我也有投影矩阵和视图矩阵以及摄像机的intersincs参数,如果这有帮助的话

我试图计算图中盒子的体积

int main(int argc,char**argv)
{
材料src、src_副本、边缘、dst;
src=imread(“冻结帧_uu1508152029892.png”,0);
src_copy=src.clone();
高斯模糊(src,边缘,尺寸(5,5),1.5,1.5);
侵蚀(边、边、垫());//这些线可能需要优化
扩张(边缘、边缘、垫子());
扩张(边缘、边缘、垫子());
侵蚀(边缘、边缘、垫子());
Canny(edges,dst,1,10,3);//可能需要优化Canny参数
imshow(“canny”,dst);
std::vector角点;
//maxCorners–要返回的最大角数。如果有更多角
//如果能找到的话,他们中最强壮的人就会回来
int=10;
//qualityLevel–描述图像角点的最小可接受质量;
//该参数的值乘以最佳拐角质量
//测量(这是最小特征值,请参见cornerMinEigenVal(),
//或Harris函数响应,请参见cornerHarris()。
//质量指标低于产品的拐角将被拒收。
//例如,如果最佳角点的质量度量值为1500,
//qualityLevel=0.01,然后是质量度量的所有角点
//少于15个将被拒绝。
双质量水平=0.01;
//minDistance–返回角点之间的最小可能欧几里德距离
双心距离=20。;
//遮罩–可选的感兴趣区域。如果图像不是空的(则为空)
//需要具有CV_8UC1类型和与图像相同的大小),它将指定
//检测角点的区域
cv::Mat面罩;
//blockSize–计算导数协变量的平均块大小
//每个像素邻域上的矩阵,请参见CornerEgenerativeValsandVecs()
int blockSize=3;
//useHarrisDetector–指示是使用运算符还是cornerMinEigenVal()
bool-usehrisdetector=false;
//k–Harris检测器的自由参数
双k=0.04;
cv::良好特性跟踪(src、角点、最大角点、质量等级、距离、遮罩、块大小、使用HarrisDetector、k);
std::矢量线;
对于(int i=0;i
阅读文档:

line–输出线参数。在二维拟合的情况下,它应该是由4个元素组成的向量(如Vec4f)-(vx,vy,x0,y0),其中(vx,vy)是与直线共线的归一化向量,(x0,y0)是直线上的点。在三维拟合的情况下,它应该是一个由6个元素组成的向量(如Vec6f)-(vx,vy,vz,x0,y0,z0),其中(vx,vy,vz)是一个与直线共线的归一化向量,(x0,y0,z0)是直线上的一个点

因此,你必须通过以下方式来划定界限:

Point2f linePoint = Point2f( v[2], v[3] );
Point2f lineDirection = Point2f( v[0], v[1]);
float factor = 50; // if lineDirection is already length 1, you could choose factor to be the desired line length
line( src, linePoint  , linePoint+ factor*lineDirection + , Scalar( 0, 0, 255 ), 3, 4 );`
阅读文件:

line–输出线参数。在二维拟合的情况下,它应该是由4个元素组成的向量(如Vec4f)-(vx,vy,x0,y0),其中(vx,vy)是与直线共线的归一化向量,(x0,y0)是直线上的点。在三维拟合的情况下,它应该是一个由6个元素组成的向量(如Vec6f)-(vx,vy,vz,x0,y0,z0),其中(vx,vy,vz)是一个与直线共线的归一化向量,(x0,y0,z0)是直线上的一个点

因此,你必须通过以下方式来划定界限:

Point2f linePoint = Point2f( v[2], v[3] );
Point2f lineDirection = Point2f( v[0], v[1]);
float factor = 50; // if lineDirection is already length 1, you could choose factor to be the desired line length
line( src, linePoint  , linePoint+ factor*lineDirection + , Scalar( 0, 0, 255 ), 3, 4 );`

你想要的输出是什么?目前我甚至不能简单地描述你到底适合什么。对于每个角点,是否在其他角点上拟合一条线?你的问题是,直线的第一点似乎总是原点?你能试着用你知道的2个点来硬编码一个线配件吗?这行吗?我试着用2点来拟合直线,得到了从原点到第二点的直线。我在试着探测盒子的边缘。因此,我所做的是得到方框的角,如代码所示,然后我想得到方框的线(边)。是的,第一个点始终是原点,即使我尝试使用两点(硬编码),你想要的输出是什么?目前我甚至不能简单地描述你到底适合什么。对于每个角点,是否在其他角点上拟合一条线?你的问题是,直线的第一点似乎总是原点?你能试着用你知道的2个点来硬编码一个线配件吗?这行吗?我试着用2点来拟合直线,得到了从原点到第二点的直线。我在试着探测盒子的边缘。因此,我所做的是得到方框的角,如代码所示,然后我想得到方框的线(边)。是的,第一点始终是原点,即使我尝试使用两点(硬编码),非常感谢!。但是我没有得到角点之间的连接线,是我的算法不正确吗?得到角点之间的连接线不需要任何直线拟合。从每个角点到另一个角点画图。@Mika如果可能的话,请你详细说明一下:“一个由4个元素组成的向量(比如Vec4f)-(vx,vy,x0,y0),