日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【图像处理】——Python霍夫变换之直线检测(主要是两个函数HoughlinesHoughlinesP)

發(fā)布時間:2023/12/10 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【图像处理】——Python霍夫变换之直线检测(主要是两个函数HoughlinesHoughlinesP) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

一、原理(摘自《數(shù)字圖像處理岡薩雷斯》)

2、Python函數(shù)

參數(shù)詳解

3、效果

4、實例


?


一、原理(摘自《數(shù)字圖像處理岡薩雷斯》)

即在xy平面上一條直線上的點在ab平面上是無數(shù)條直線組成的,而這些直線都會經(jīng)過一個點,這個點的a,b值就是對應xy平面直線的截距與斜率

2、Python函數(shù)

參數(shù)詳解

dst:??? 輸出圖像. 它應該是個灰度圖 (但事實上是個二值化圖)
lines:? 儲存著檢測到的直線的參數(shù)對 (x_{start}, y_{start}, x_{end}, y_{end}) 的容器,結構如[[[x1,y1,x2,y2]],[[...]]]
rho :?? 參數(shù)極徑 r 以像素值為單位的分辨率. 我們使用 1 像素.
theta:? 參數(shù)極角 theta 以弧度為單位的分辨率. 我們使用 1度 (即CV_PI/180)
threshold:??? 控制檢測出線段的條件。設置閾值: 一條直線所需最少的的曲線在一點相交,超過設定閾值才被檢測出線段,值越大,基本上意味著檢出的線段越長,檢出的線段個數(shù)越少。因為閾值越大,超過閾值的點越少,即xy平面的直線越少,但是因為閾值越大,說明檢測出在同一條直線上的點越多,即直線越長。這個參數(shù)是針對參數(shù)空間而言的,在參數(shù)空間中一條曲線就代表在xy平面上的一個點
minLinLength: 能組成一條直線的最少點的數(shù)量. 點數(shù)量不足的直線將被拋棄,其實這個參數(shù)的意義跟上一個很類似,只是這個參數(shù)是針對xy平面而言的,即當組成直線的點達到一點數(shù)量的時候才被檢測出為線段,否則過濾掉
maxLineGap:?? 控制檢測出直線長短,在同一條直線上的點,能夠被連接的最大距離,越大得到的線越長,如下圖,點在直線上,若此時距離maxlineGap小于設定的值,則連接,否則就不連接

""" cv2.HoughLines()dst: 輸出圖像. 它應該是個灰度圖 (但事實上是個二值化圖)lines: 儲存著檢測到的直線的參數(shù)對 (r,\theta) 的容器 rho : 參數(shù)極徑 r 以像素值為單位的分辨率. 我們使用 1 像素.theta: 參數(shù)極角 \theta 以弧度為單位的分辨率. 我們使用 1度 (即CV_PI/180)threshold: 設置閾值: 一條直線所需最少的的曲線交點srn and stn: 參數(shù)默認為0return:返回的是一個包含rho和theta的數(shù)組,[rho,theta]cv2.HoughLinesP(dst, lines, 1, CV_PI/180, 50, 50, 10 )dst: 輸出圖像. 它應該是個灰度圖 (但事實上是個二值化圖) lines: 儲存著檢測到的直線的參數(shù)對 (x_{start}, y_{start}, x_{end}, y_{end}) 的容器rho : 參數(shù)極徑 r 以像素值為單位的分辨率. 我們使用 1 像素.theta: 參數(shù)極角 \theta 以弧度為單位的分辨率. 我們使用 1度 (即CV_PI/180)threshold: 設置閾值: 一條直線所需最少的的曲線交點。超過設定閾值才被檢測出線段,值越大,基本上意味著檢出的線段越長,檢出的線段個數(shù)越少。minLinLength: 能組成一條直線的最少點的數(shù)量. 點數(shù)量不足的直線將被拋棄.maxLineGap: 能被認為在一條直線上的兩點的最大距離。return:返回的是含有一條直線的起始點和終點坐標[x1,y1,x2,y2]""" import cv2 import numpy as np original_img= cv2.imread("jianzhu.png", 0) img = cv2.resize(original_img,None,fx=0.8, fy=0.8, interpolation = cv2.INTER_CUBIC)img = cv2.GaussianBlur(img,(3,3),0) edges = cv2.Canny(img, 50, 150, apertureSize = 3) lines = cv2.HoughLines(edges,1,np.pi/180,118) #這里對最后一個參數(shù)使用了經(jīng)驗型的值 result = img.copy() for line in lines:rho = line[0][0] #第一個元素是距離rhotheta= line[0][1] #第二個元素是角度thetaprint (rho)print (theta)if (theta < (np.pi/4. )) or (theta > (3.*np.pi/4.0)): #垂直直線pt1 = (int(rho/np.cos(theta)),0) #該直線與第一行的交點#該直線與最后一行的焦點pt2 = (int((rho-result.shape[0]*np.sin(theta))/np.cos(theta)),result.shape[0])cv2.line( result, pt1, pt2, (255)) # 繪制一條白線else: #水平直線pt1 = (0,int(rho/np.sin(theta))) # 該直線與第一列的交點#該直線與最后一列的交點pt2 = (result.shape[1], int((rho-result.shape[1]*np.cos(theta))/np.sin(theta)))cv2.line(result, pt1, pt2, (255), 1) # 繪制一條直線cv2.imshow('Canny', edges ) cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows()

3、效果

4、實例

# -*- coding: utf-8 -*-import cv2 import numpy as np#兩個回調(diào)函數(shù) def HoughLinesP(minLineLength):tempIamge = scr.copy()lines = cv2.HoughLinesP( edges, 1, np.pi/180,threshold=minLineLength,minLineLength=180,maxLineGap=40)for x1,y1,x2,y2 in lines[:,0]:cv2.line(tempIamge,(x1,y1),(x2,y2),(0,255,0),2)print(lines)cv2.imshow(window_name,tempIamge)#臨時變量 minLineLength = 20#全局變量 # minLINELENGTH = 20 window_name = "HoughLines Demo"#讀入圖片,模式為灰度圖,創(chuàng)建窗口 scr = cv2.imread("22.jpg")gray = cv2.cvtColor(scr,cv2.COLOR_BGR2GRAY) print(gray.shape) img = cv2.GaussianBlur(gray,(3,3),0) edges = cv2.Canny(img, 50, 150, apertureSize = 3) cv2.namedWindow(window_name)#初始化 HoughLinesP(minLineLength)if cv2.waitKey(0) == 27:cv2.destroyAllWindows()

?maxLineGap = 10:

maxLineGap = 30:

maxLineGap = 40:

當maxLineGap = 40時,直線基本上被完整地檢測出來了

5、Houghlines和HoughLinesP的區(qū)別

https://www.cnblogs.com/bjxqmy/p/12331656.html

6、參考文獻

https://www.cnblogs.com/dyllove98/archive/2013/07/12/3186872.html

https://www.cnblogs.com/bjxqmy/p/12331656.html

https://blog.csdn.net/wsp_1138886114/article/details/82936218

?

總結

以上是生活随笔為你收集整理的【图像处理】——Python霍夫变换之直线检测(主要是两个函数HoughlinesHoughlinesP)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。