黑馬程序員人工智能教程_10小時學會圖像處理OpenCV入門教程中,3.6霍夫線檢測代碼,關於直線繪製的部分,沒有看懂,這裏,根據本身的理解,對直線繪製的代碼進行了實現。程序員
對於笛卡爾座標系下y = ax + b
,轉換成極座標系下有rho = x * cos(theta) + y * sin(theta)
,
兩邊除以sin(theta)獲得下式:y = - cos(theta) / sin(theta) * x + rho / sin(theta)
當sin(theta) ==0時,有x = rho / cos(theta)
當sin(theta) !=0時,有a = - cos(theta) / sin(theta) ; b = rho / sin(theta)
由a, b能夠獲得直角座標系下直線方程,能夠獲得兩個點,便可畫出直線。
在圖像上繪製直線的代碼以下所示,最後的效果,與老師視頻中的效果一致。代碼以下所示人工智能
print('lines.shape =', lines.shape) h, w = img.shape[:2] for line in lines: rho, theta = line[0] if math.sin(theta) == 0: x = int(rho / math.cos(theta)) cv.line(img, (x, 0), (x, h - 1), (0, 255, 0)) else: a = - math.cos(theta) / math.sin(theta) b = rho / math.sin(theta) # y = a * x + b,計算直線中兩個點 x1 = 0 y1 = int(b) x2 = w - 1 y2 = int(a * x1 + b) cv.line(img, (x1, y1), (x2, y2), (0, 255, 0))
https://zhuanlan.zhihu.com/p/... (hough變換原理以及實現(轉載) - 知乎)code