簡體   English   中英

在Python中使用OpenCv檢測幾乎直線

[英]Detecting almost straight lines using OpenCv in Python

我正在使用OpenCv檢測圖像中的直線。 下面是代碼:

import cv2
import numpy as np

img = cv2.imread('Image.jpg')
img = img[:, 10:img.shape[1]-10]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
minLineLength = img.shape[1] - 300
lines = cv2.HoughLinesP(image=edges, rho=0.02, theta=np.pi / 500, threshold=10, lines=np.array([]), minLineLength=minLineLength, maxLineGap=2)
a, b, c = lines.shape
for i in range(a):
    cv2.line(img, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 2, cv2.LINE_AA)
cv2.imwrite('result.png', img)

對於圖像( PDF的截圖Image.jpg ),我得到的是result.png ),其結果恰好是我想要的輸出。

image.jpg的 在此處輸入圖片說明

result.png 在此處輸入圖片說明

但是,當我將下面的Image Test.jpg作為輸入時,我的算法無法正常工作。 它給出了以下錯誤:

a, b, c = lines.shape # 10th Line
AttributeError: 'NoneType' object has no attribute 'shape'

我認為是因為在Test.jpg中 ,水平線不是那么直( 因為我通過手機的攝像頭單擊了它 ),而且如果我將minLineLength值更改為100 ,則不會顯示上述錯誤,而是在每條顯示不完整的褪色線行。 那么,誰能告訴我在算法中應該更改哪些參數才能使其正常工作?

test.jpg放在 在此處輸入圖片說明

您需要放松對“直線”的定義。 如果您已經熟悉幾何的術語,則說明文件很清楚。 “ rho”和“ theta”是極坐標的變量:在這種情況下為長度和方向。 由於您擔心方向變化,因此需要放寬theta值

theta=np.pi / 500

過於嚴格(PI / 500弧度,剛好超過1/3度)。 減少500數字,直到獲得所需的結果。 例如,嘗試從90 (1度)開始。

可能添加條件以測試是否有一行。 請記住,您正在尋找特定長度的線。 第二張圖片沒有任何圖片。 我嘗試了您的代碼並發表了評論

minLineLength = img.shape[1] - 300

您的代碼僅適用於特定圖像。 如果您需要使用任何圖像注釋掉行

#img = img[:, 10:img.shape[1]-10]
minLineLength = 10 #img.shape[1] - 300

這是可行的,如果是這種情況,我執行的最終代碼是

import cv2
import numpy as np
img = cv2.imread('test.jpg')
#img = img[:, 10:img.shape[1]-10]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
minLineLength = 20 #img.shape[1] - 300
lines = cv2.HoughLinesP(image=edges, rho=0.02, theta=np.pi / 500,     threshold=10, lines=np.array([]), minLineLength=minLineLength, maxLineGap=2)
a, b, c = lines.shape

for i in range(a):
    cv2.line(img, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2],  lines[i][0][3]), (0, 0, 255), 2, cv2.LINE_AA)
cv2.imwrite('result.png', img)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM