简体   繁体   English

线方程的错误系数

[英]Wrong coefficients for the line equation

Suppose I have a list of line segments [[[x1,y1],[x2,y2],...] detected with cv2.HoughLinesP .假设我有一个用cv2.HoughLinesP检测到的线段列表[[[x1,y1],[x2,y2],...] This list represent only the endpoints of each line segment.此列表仅表示每个线段的端点。

Segments were sorted by It's x2, x2 value ie ordered "from left to right" with respect to the image, from which the segments were taken from.分段按它的 x2、x2 值排序,即相对于从中获取分段的图像“从左到右”排序。

segments_sorted = [[(0, 797), (46, 769)], [(2, 766), (138, 690)], [(220, 644), (399, 541)], [(427, 523), (615, 414)], [(460, 513), (615, 419)], [(495, 491), (614, 419)], [(753, 368), (843, 518)], [(958, 708), (1099, 706)], [(1047, 681), (1088, 729)], [(1047, 706), (1095, 761)]]

For better understanding, they were drawn on the image that is shown below:为了更好地理解,它们被绘制在下图所示的图像上:

在此处输入图像描述

I need to grab the left-most and the right-most lines end extend them to image boundaries (left-most and the right-most segment endpoint respectively).我需要抓住最左边和最右边的线端将它们延伸到图像边界(分别是最左边和最右边的线段端点)。

left_most_segment = [(0, 797), (46, 769)]

right_most_segment = [(1047, 706), (1095, 761)]

def get_line_coefficients(line):
    (x1, y1), (x2, y2) = line
    a = y1 - y2,
    b = x2 - x1,
    c = (x1 - x2) * y1 + (y2 - y1) * x1

    return a, b, c

# using the Ax + By + C = 0 equation  - get the coefficients and update the  endpoints

r_a, r_b, r_c = get_line_coefficients(right_most_segment)

# l_a = -55
# l_b = 48
# l_c = 23697

The problem is that, for all the segments that I fit into get_line_coefficients() the c coefficient value is too big, like -36662 or 23697 .问题是,对于我适合get_line_coefficients()的所有段, c数值太大,例如-3666223697

I thought previously to update the x,y coordinate of the endpoint.我之前想更新端点的 x,y 坐标。

# e.g. for the right-most segment, x1,y1 should now be updated

new_x = 0
new_y =  -(r_a*new_x + r_c) / r_b

new_x = image.shape[1]

new_y = r_a * new_x + r_c / r_b

sorted_lines[-1][1] = [new_x, new_y]

cv2.polylines(original, np.array(sorted_lines), False, RGB_BLUE, thickness=3)

cv2.polylines breakes at cv2.polylines

...
cv2.error: OpenCV(4.1.1) /io/opencv/modules/imgproc/src/drawing.cpp:2435: error: (-215:Assertion failed) p.checkVector(2, CV_32S) >= 0 in function 'polylines'

А dummy problem was caused by type mismatch. А 虚拟问题是由类型不匹配引起的。

new_y = int(-(r_a * new_x + r_c) / r_b) # should be an int

After several tests It becomes apparent that c value was computed in the right way.经过几次测试,很明显c值是以正确的方式计算的。

the image with right-most line extended最右边线延伸的图像在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM