python hough變換檢測直線的實(shí)現(xiàn)方法
1 原理
2 檢測步驟
將參數(shù)空間(ρ,θ) 量化成m*n(m為ρ的等份數(shù),n為θ的等份數(shù))個單元,并設(shè)置累加器矩陣,初始值為0;
對圖像邊界上的每一個點(diǎn)(x,y)帶入ρ=xcosθ+ysinθ,求得每個θ對應(yīng)的ρ值,并在ρ和θ所對應(yīng)的單元,將累加器加1,即:Q(i,j)=Q(i,j)+1;
檢驗(yàn)參數(shù)空間中每個累加器的值,累加器最大的單元所對應(yīng)的ρ和θ即為直角坐標(biāo)系中直線方程的參數(shù)。
3 接口
image:二值圖像,canny邊緣檢測輸出。這里是result。
rho: 以像素為單位的距離精度,這里為1像素。如果想要檢測的線段更多,可以設(shè)為0.1。
theta: 以弧度為單位的角度精度,這里為numpy.pi/180。如果想要檢測的線段更多,可以設(shè)為0.01 * numpy.pi/180。
threshod: 閾值參數(shù),int類型,超過設(shè)定閾值才被檢測出線段,這里為10。
minLineLength:線段以像素為單位的最小長度。
maxLineGap:同一方向上兩條線段判定為一條線段的最大允許間隔。
4 代碼及結(jié)果
import os import numpy as np import cv2 from PIL import Image, ImageEnhance import math def img_processing(img): # 灰度化 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) # canny邊緣檢測 edges = cv2.Canny(binary, 50, 150, apertureSize=3) return edges def line_detect(img): img = Image.open(img) img = ImageEnhance.Contrast(img).enhance(3) # img.show() img = np.array(img) result = img_processing(img) # 霍夫線檢測 lines = cv2.HoughLinesP(result, 1, 1 * np.pi/180, 10, minLineLength=10, maxLineGap=5) # print(lines) print("Line Num : ", len(lines)) # 畫出檢測的線段 for line in lines: for x1, y1, x2, y2 in line: cv2.line(img, (x1, y1), (x2, y2), (255, 0, 0), 1) pass img = Image.fromarray(img, 'RGB') img.show() if __name__ == "__main__": line_detect("1.jpg") pass
原圖如下:
檢測結(jié)果:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫相關(guān)操作詳解
這篇文章主要介紹了使用Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫相關(guān)操作詳解,pymysql是Python中操作數(shù)據(jù)庫的第三方模塊,通過這個模塊的相關(guān)方法,我們可以連接并且去操作mysql數(shù)據(jù)庫,需要的朋友可以參考下2023-08-08python實(shí)現(xiàn)轉(zhuǎn)圈打印矩陣
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)轉(zhuǎn)圈打印矩陣,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03Python循環(huán)中else,break和continue的用法實(shí)例詳解
這篇文章主要介紹了Python循環(huán)中else,break和continue的用法,結(jié)合實(shí)例形式詳細(xì)分析了Python for循環(huán)、while循環(huán)中else,break和continue的功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-07-07Python初識二叉樹續(xù)之實(shí)戰(zhàn)binarytree
binarytree庫是一個Python的第三方庫,這個庫實(shí)現(xiàn)了一些二叉樹相關(guān)的常用方法,使用二叉樹時,可以直接調(diào)用,不需要再自己實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Python初識二叉樹之實(shí)戰(zhàn)binarytree的相關(guān)資料,需要的朋友可以參考下2022-05-05利用python庫在局域網(wǎng)內(nèi)傳輸文件的方法
今天小編就為大家分享一篇利用python庫在局域網(wǎng)內(nèi)傳輸文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06