中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Python+OpenCV圖像處理實現直線檢測

發布時間:2020-10-26 15:03:57 來源:億速云 閱讀:565 作者:Leah 欄目:開發技術

這篇文章運用簡單易懂的例子給大家介紹使用Python+OpenCV圖像處理實現直線檢測,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

簡介:

1.霍夫變換(Hough Transform) 霍夫變換是圖像處理中從圖像中識別幾何形狀的基本方法之一,應用很廣泛,也有很多改進算法。主要用來從圖像中分離出具有某種相同特征的幾何形狀(如,直線,圓等)。最基本的霍夫變換是從黑白圖像中檢測直線(線段)。

2.Hough變換的原理是將特定圖形上的點變換到一組參數空間上,根據參數空間點的累計結果找到一個極大值對應的解,那么這個解就對應著要尋找的幾何形狀的參數(比如說直線,那么就會得到直線的斜率k與常熟b,圓就會得到圓心與半徑等等)

3.霍夫線變換是一種用來尋找直線的方法。用霍夫線變換之前, 首先需要對圖像進行邊緣檢測的處理,也即霍夫線變換的直接輸入只能是邊緣二值圖像。

4.霍夫直線檢測的具體原理參見:

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html

代碼如下:

#直線檢測
#使用霍夫直線變換做直線檢測,前提條件:邊緣檢測已經完成
import cv2 as cv
import numpy as np

#標準霍夫線變換
def line_detection(image):
  gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)
  edges = cv.Canny(gray, 50, 150, apertureSize=3) #apertureSize參數默認其實就是3
  cv.imshow("edges", edges)
  lines = cv.HoughLines(edges, 1, np.pi/180, 80)
  for line in lines:
    rho, theta = line[0] #line[0]存儲的是點到直線的極徑和極角,其中極角是弧度表示的。
    a = np.cos(theta)  #theta是弧度
    b = np.sin(theta)
    x0 = a * rho  #代表x = r * cos(theta)
    y0 = b * rho  #代表y = r * sin(theta)
    x1 = int(x0 + 1000 * (-b)) #計算直線起點橫坐標
    y1 = int(y0 + 1000 * a)  #計算起始起點縱坐標
    x2 = int(x0 - 1000 * (-b)) #計算直線終點橫坐標
    y2 = int(y0 - 1000 * a)  #計算直線終點縱坐標  注:這里的數值1000給出了畫出的線段長度范圍大小,數值越小,畫出的線段越短,數值越大,畫出的線段越長
    cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)  #點的坐標必須是元組,不能是列表。
  cv.imshow("image-lines", image)

#統計概率霍夫線變換
def line_detect_possible_demo(image):
  gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)
  edges = cv.Canny(gray, 50, 150, apertureSize=3) # apertureSize參數默認其實就是3
  lines = cv.HoughLinesP(edges, 1, np.pi / 180, 60, minLineLength=60, maxLineGap=5)
  for line in lines:
    x1, y1, x2, y2 = line[0]
    cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
  cv.imshow("line_detect_possible_demo",image)

src = cv.imread('E:/imageload/louti.jpg')
print(src.shape)
cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE) 
cv.imshow('input_image', src)
line_detection(src)
src = cv.imread('E:/imageload/louti.jpg') #調用上一個函數后,會把傳入的src數組改變,所以調用下一個函數時,要重新讀取圖片
line_detect_possible_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

運行結果:

使用Python+OpenCV圖像處理實現直線檢測

注意:

1.opencv的HoughLines函數是標準霍夫線變換函數,該函數的功能是通過一組參數對 使用Python+OpenCV圖像處理實現直線檢測 的集合來表示檢測到的直線,其函數原型為:HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines

關于使用Python+OpenCV圖像處理實現直線檢測就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

方山县| 呼伦贝尔市| 石泉县| 城固县| 大同县| 教育| 抚顺市| 玉龙| 舞阳县| 宿迁市| 牟定县| 崇仁县| 大方县| 泰来县| 信阳市| 柯坪县| 满洲里市| 太康县| 山丹县| 抚松县| 鹰潭市| 双江| 松溪县| 松桃| 盈江县| 汉源县| 罗定市| 和政县| 康乐县| 鄄城县| 松江区| 乳源| 靖边县| 鲁山县| 吴桥县| 桃园县| 丹江口市| 闻喜县| 鄂伦春自治旗| 二手房| 博爱县|