首页 > 编程知识 正文

空间中两条直线的距离怎么算,二条二行线之问的距离

时间:2023-05-05 23:10:30 阅读:175565 作者:4298

参考博客: http://blog.csdn.net/qiancheng lenger/article/details/20956145

计算图示两条平行直线的距离

#includeopencv2(opencv.HPP

#include iostream

使用命名空间cv;

using namespace std;

int main () )

{

请参见-------------------------------------------------

/*第一步:细化直线*

/*步骤2 :求出直线坐标*

/*步骤3 :对齐直线*

/*步骤4 :计算距离*

请参见-------------------------------------------------

matimagesrc=im read (f : ((1. png ) );

Mat ImageDst;

命名窗口(src image );

命名窗口(dstimage );

//namedwindow('contours );

//二值化

cvtcolor(imagesrc,ImageDst,CV_BGR2GRAY );

threshold(ImageDst,imagedst,40,255,CV_THRESH_BINARY );

//细化直线,利用形态学膨胀

mat kernel=getstructuringelement (morph _ rect,size ) 3,point(-1,-1) );

dilate(ImageDst,imagedst,kernel ); //3*3 kernel形态学膨胀

//求出直线坐标

vectorvectorPoint contours;

findcontours(imagedst,contours,CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE );

//直线拟合直线方程:Ax By C=0

Vec4f line1、line2;

cv:3360fitline(contours[1],line1,cv _ dist _ L2,0,0.01,0.01 ); //不知道为什么如果没有放入cv就会报告错误,会引起异常的中断

cv:3360fitline(contours[2],line2,cv _ dist _ L2,0,0.01,0.01 );

cout'line1:('line1[0] )、' line1[1] )、' line1[2] '、' line1[3] )、(n );

cout'line2:(line2[0] )、' line2[1] )、' line2[2] )、' line2[3] )、(n );

float k1=line1[1]/line1[0];

float k2=line2[1]/line2[0];

float b1=line1[3] - k1*line1[2];

float b2=line2[3] - k2*line2[2];

floatdistance=ABS(B1-B2 )/sqrt ) K1*K1 );

printf(line1:y=%FX%f(n ),k1,b1 );

printf(line2:y=%FX%f(n ),k2,b2 );

打印(distance is % fpix (n ),distance );

imshow(srcimage )、ImageSrc );

imshow(dstimage )、ImageDst;

维客(0;

返回0;

}

显示原图

显示精致的图像

直线和直线的距离(以像素为单位) ) ) ) ) )。

3358 www.Sina.com/http://www.Sina.com/2d或3D点集的直线拟合voidfitline (input array 3358 www.Sina.com /,output arrarray ) double 注意:,Double3358www.Sina.com/,Double3358www.Sina.com/)

points2D或3D点集、32位整数或浮点坐标

dist_type拟合的距离类型。

param特定距离的数值参数。 如果为0,则选择几个最佳值

reps、aeps半径(坐标原点到直线的距离)和角度的精度通常为0.01。

线输出的直线参数。 在2D拟合情况下,是包含4个浮点数的排列[VX,vy,x0,y0],其中,[VX,vy]是线的单位矢量,[x0,y0]是线上的某一点,在3D拟合的情况下,是线的单位矢量

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。