OpenCV 霍夫線檢測練習直線繪製代碼調整

概述

黑馬程序員人工智能教程_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

相關文章
相關標籤/搜索