Python 为什么要为hough线变换加1000和减1000?

Python 为什么要为hough线变换加1000和减1000?,python,windows,opencv,computer-vision,Python,Windows,Opencv,Computer Vision,下面是教程中的一些代码。为什么我们加1000减1000,为什么b是负数 import cv2 import numpy as np img = cv2.imread('sudoku.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray, 50, 150, apertureSize=3) lines = cv2.HoughLines(edges, 1, np.pi /180, 200) for li

下面是教程中的一些代码。为什么我们加1000减1000,为什么b是负数

import cv2
import numpy as np


img = cv2.imread('sudoku.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi /180, 200)

for line in lines:
    rho, theta = line[0]
    a = np.cos(theta)
    b = np.sin(theta)
    x0  = a * rho
    y0 = b * rho

    x1 = int(x0 + 1000 * (-b))
    y1 = int(y0 + 1000 * (a))

    x2 = int(x0 - 1000 * (-b))
    y2 = int(y0 - 1000 * (a))
    cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)

在Python/OpenCV HoughLines中,定义线条的端点,以便在绘制线条时,线条可以到达(或经过)图像的侧面。使用的hough变换仅返回直线与原始线的角度和距离。因此,额外的计算会找到一条直线从原点到直线的交点,这样它就可以识别直线上的某个点。但它不知道这条线应该有多长。所以它沿着这条线从这一点延伸了这么多。因为它知道直线和直线上一点的角度,所以它只提供两个端点到直线上给定点的距离。如果图像的尺寸大于约2*1000像素,则如果希望线条延伸到图像的侧面,则可能需要增加1000值

减号(-b)出现如下:


从原点到直线垂直方向的方向由其斜率
b/a=sin(θ)/cos(θ)=tan(θ)
给出。请参见第页的图表。但直线本身的方向与之成90度角,其角度由
-1/tan(θ)=-cos(θ)/sin(θ)=-a/b或a/-b
给出。也就是说,它的斜率是(a/-b)=(y-yo)/(x-xo)=delY/delX。看见因此,为了得到两个端点,你可以从xo,yo给出的任意点开始,沿着直线的任意方向走,这样端点X分量是xo+-1000delX=xo+-1000cos(perp_角度)=xo+-1000*(-b),端点Y分量是yo+-1000delY=yo+-1000sin(perp_角度)=yo 1000*a。其中perp_角是沿实际直线的方向。

我认为这只是在缩放它们?啊哈!这是有道理的。但是为什么b是否定的呢?请看我在上面的答案中添加的内容。