OpenCV半小時(shí)掌握基本操作之直線檢測(cè)
【OpenCV】 ⚠️高手勿入! 半小時(shí)學(xué)會(huì)基本操作 ⚠️ 直線檢測(cè)
概述
OpenCV 是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺庫(kù), 支持多語(yǔ)言, 功能強(qiáng)大. 今天小白就帶大家一起攜手走進(jìn) OpenCV 的世界. (第 13 課)
霍夫直線變換
霍夫變換 (Hough Line Transform) 是圖像處理中的一種特征提取技術(shù). 通過平面空間到極值坐標(biāo)空間的轉(zhuǎn)換, 可以幫助我們實(shí)現(xiàn)直線檢測(cè). 如圖:
原理詳解
當(dāng)我們把直線 y = kx + b 畫在指標(biāo)坐標(biāo)系上, 如下圖. 我們?cè)購(gòu)脑c(diǎn)引線段到直線上的任一點(diǎn).
我們可以得到這條線段與 x 軸的夾角為 θ, 距離是 r. 對(duì)于直線上的任一點(diǎn) (x0, y0), 我們可以得到公式:
代碼實(shí)戰(zhàn)
HoughLines
格式:
cv2.HoughLines(image, rho, theta, threshold, lines=None, srn=None, stn=None, min_theta=None, max_theta=None)
參數(shù):
- image: 輸入圖像
- rho: 線性搜索半徑步長(zhǎng), 以像素為單位
- theta: 線性搜索步長(zhǎng), 以弧度為單位
- threshold: 累計(jì)閾值
例子:
import numpy as np import cv2 from matplotlib import pyplot as plt # 讀取圖片 image = cv2.imread("sudoku.jpg") image_copy = image.copy() # 轉(zhuǎn)換成灰度圖 image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 邊緣檢測(cè), Sobel算子大小為3 edges = cv2.Canny(image_gray, 170, 220, apertureSize=3) # 霍夫曼直線檢測(cè) lines = cv2.HoughLines(edges, 1, np.pi / 180, 250) # 遍歷 for line in lines: # 獲取rho和theta 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(image_copy, (x1, y1), (x2, y2), (0, 0, 255), thickness=5) # 圖片展示 f, ax = plt.subplots(2, 2, figsize=(12, 12)) # 子圖 ax[0, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) ax[0, 1].imshow(image_gray, "gray") ax[1, 0].imshow(edges, "gray") ax[1, 1].imshow(cv2.cvtColor(image_copy, cv2.COLOR_BGR2RGB)) # 標(biāo)題 ax[0, 0].set_title("original") ax[0, 1].set_title("image gray") ax[1, 0].set_title("image edge") ax[1, 1].set_title("image line") plt.show()
輸出結(jié)果:
HoughLinesP
此函數(shù)在 HoughLines 的基礎(chǔ)上末尾加了一個(gè)代表概率 (Probabilistic) 的 P, 表明它可以采用累計(jì)概率霍夫變換, 來(lái)找出二值圖像中的直線.
格式:
HoughLinesP(image, rho, theta, threshold, lines=None, minLineLength=None, maxLineGap=None)
參數(shù):
- image: 輸入圖像
- rho: 線性搜索半徑步長(zhǎng), 以像素為單位
- theta: 線性搜索步長(zhǎng), 以弧度為單位
- threshold: 累計(jì)閾值
- minLineLength: 最短直線長(zhǎng)度
- maxLineGap: 最大孔隙距離
例子:
import numpy as np import cv2 from matplotlib import pyplot as plt # 讀取圖片 image = cv2.imread("sudoku.jpg") image_copy = image.copy() # 轉(zhuǎn)換成灰度圖 image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 邊緣檢測(cè), Sobel算子大小為3 edges = cv2.Canny(image_gray, 170, 220, apertureSize=3) # 霍夫曼直線檢測(cè) lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 100, minLineLength=100, maxLineGap=10) # 遍歷 for line in lines: # 獲取坐標(biāo) x1, y1, x2, y2 = line[0] cv2.line(image_copy, (x1, y1), (x2, y2), (0, 0, 255), thickness=5) # 圖片展示 f, ax = plt.subplots(2, 2, figsize=(12, 12)) # 子圖 ax[0, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) ax[0, 1].imshow(image_gray, "gray") ax[1, 0].imshow(edges, "gray") ax[1, 1].imshow(cv2.cvtColor(image_copy, cv2.COLOR_BGR2RGB)) # 標(biāo)題 ax[0, 0].set_title("original") ax[0, 1].set_title("image gray") ax[1, 0].set_title("image edge") ax[1, 1].set_title("image line") plt.show()
輸出結(jié)果:
到此這篇關(guān)于OpenCV半小時(shí)掌握基本操作之直線檢測(cè)的文章就介紹到這了,更多相關(guān)OpenCV直線檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch cuda上tensor的定義 以及減少cpu的操作詳解
這篇文章主要介紹了pytorch cuda上tensor的定義 以及減少cpu的操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-06-06python3實(shí)現(xiàn)ftp服務(wù)功能(服務(wù)端 For Linux)
這篇文章主要介紹了python3實(shí)現(xiàn)ftp服務(wù)功能,服務(wù)端 For Linux,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Python入門開發(fā)教程 windows下搭建開發(fā)環(huán)境vscode的步驟詳解
大家都知道Python是跨平臺(tái)的,它可以運(yùn)行在Windows、Mac和各種Linux/Unix系統(tǒng)上。在Windows上寫Python程序,放到Linux上也是能夠運(yùn)行的,今天給大家分享Python開發(fā)環(huán)境搭建vscode的步驟,一起看看吧2021-07-07OpenCV 表盤指針自動(dòng)讀數(shù)的示例代碼
這篇文章主要介紹了OpenCV 表盤指針自動(dòng)讀數(shù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04使用Matplotlib創(chuàng)建基本圖表的詳細(xì)指南
Matplotlib 是一個(gè)功能強(qiáng)大的 Python 庫(kù),用于創(chuàng)建各種類型的圖表和可視化,在本文中,我們將提供一個(gè)完整的指南,介紹如何使用 Matplotlib 創(chuàng)建基本的圖表,包括折線圖、散點(diǎn)圖、柱狀圖和餅圖,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-05-05