Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
Python openCV检测平行线_Python_Opencv_Hough Transform - Fatal编程技术网

Python openCV检测平行线

Python openCV检测平行线,python,opencv,hough-transform,Python,Opencv,Hough Transform,我有一个图像,里面有一些形状。我使用hough线检测线。如何检测哪些线是平行的?笛卡尔坐标系中的线方程: y=k*x+b 如果k1=k2,两条线y=k1*x+b1,y=k2*x+b2平行 因此,您需要计算每个检测到的线的系数k 为了唯一地识别直线方程,您需要知道属于直线的两个点的坐标 找到带有HoughLines(С++)的行后: 矢量线; HoughLines(dst,lines,1,CV_PI/180100,0,0); 有矢量线,它将检测到的线的参数(r,θ)存储在极坐标中。您需要在笛卡尔

我有一个图像,里面有一些形状。我使用hough线检测线。如何检测哪些线是平行的?

笛卡尔坐标系中的线方程:

y=k*x+b

如果k1=k2,两条线y=k1*x+b1,y=k2*x+b2平行

因此,您需要计算每个检测到的线的系数k

为了唯一地识别直线方程,您需要知道属于直线的两个点的坐标

找到带有HoughLines(С++)的行后:

矢量线;
HoughLines(dst,lines,1,CV_PI/180100,0,0);
有矢量线,它将检测到的线的参数(r,θ)存储在极坐标中。您需要在笛卡尔坐标系中传递它们:

下面是C++中的示例:

for( size_t i = 0; i < lines.size(); i++ )
{
  float rho = lines[i][0], theta = lines[i][1];
  Point pt1, pt2;
  double a = cos(theta), b = sin(theta);
  double x0 = a*rho, y0 = b*rho;
  pt1.x = cvRound(x0 + 1000*(-b)); //the first point
  pt1.y = cvRound(y0 + 1000*(a)); //the first point
  pt2.x = cvRound(x0 - 1000*(-b)); //the second point
  pt2.y = cvRound(y0 - 1000*(a)); //the second point
}
for(size_t i=0;i

获得直线的这两点后,可以计算其方程式。

HoughLines以极坐标返回其结果。所以只需检查角度的第二个值。不需要转换为x,y

def findparallel(lines):

lines1 = []
for i in range(len(lines)):
    for j in range(len(lines)):
        if (i == j):continue
        if (abs(lines[i][1] - lines[j][1]) == 0):          
             #You've found a parallel line!
             lines1.append((i,j))


return lines1

检查检测线的θ值是否平行是否足够?我们可以说θ值等于平行线吗?我认为检查θ值应该是足够的检查。如果这是在python中完成的,如标记中所述,您可以使用scipy版本的houghlines,它提供了houghspace输出图像:参见此处]()。然后可以翻转独立轴(θ或“X”)和从属轴(rho或“Y”),使θ现在成为从属轴。对该Hough空间图像进行阈值化(以获得与最可能的线对应的(ρ,θ)的最密集点)后,可以将水平线拟合到数据:θ=常数(y=mx+b,无斜率)。
def findparallel(lines):

lines1 = []
for i in range(len(lines)):
    for j in range(len(lines)):
        if (i == j):continue
        if (abs(lines[i][1] - lines[j][1]) == 0):          
             #You've found a parallel line!
             lines1.append((i,j))


return lines1