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

溫馨提示×

溫馨提示×

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

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

OpenCV如何實現直線檢測

發布時間:2022-08-01 14:03:21 來源:億速云 閱讀:230 作者:iii 欄目:開發技術

本篇內容介紹了“OpenCV如何實現直線檢測”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1 介紹

本文主要介紹OpenCV自帶的直線檢測函數HoughLines()的用法,這個函數的第一個參數是一個二值化圖像,所以在進行霍夫變換之前要首先進行二值化,或者進行Canny 邊緣檢測。第二和第三個值分別代表β 和 θ 的精確度。第四個參數是閾值,只有累加其中的值高于閾值時才被認為是一條直線,也可以把它看成能檢測到的直線的最短長度(以像素點為單位)。返回值就是(β; θ)。β 的單位是像素,θ的單位是弧度。

2 代碼 

#直線檢測
#使用霍夫直線變換做直線檢測,前提條件:邊緣檢測已經完成
import cv2 as cv
import numpy as np
import matplotlib.pylab as plt
 
#標準霍夫線變換
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(r'..\edge.jpg')
print(src.shape)
cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)
cv.imshow('input_image', src)
line_detection(src)
src = cv.imread(r'..\edge.jpg') #調用上一個函數后,會把傳入的src數組改變,所以調用下一個函數時,要重新讀取圖片
line_detect_possible_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

3 效果 

OpenCV如何實現直線檢測

“OpenCV如何實現直線檢測”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

泰安市| 章丘市| 永丰县| 缙云县| 米泉市| 岳阳县| 长岭县| 五原县| 慈利县| 泽普县| 镶黄旗| 桂东县| 梓潼县| 新乐市| 根河市| 金门县| 东兰县| 剑阁县| 铜梁县| 清新县| 淮阳县| 茌平县| 白山市| 南京市| 张北县| 巴里| 巢湖市| 峡江县| 明水县| 神池县| 泸定县| 天长市| 探索| 兴山县| 东港市| 措美县| 凤阳县| 桃园县| 祁门县| 乡城县| 西安市|