2017-02-13 2172 views
2

我在下面的代碼中找到了,它使用canny邊緣檢測和hough算法檢測所有線條。下面的代碼用於屏蔽我需要從中獲取點的線,但由於這是圖像,我不知道如何獲取x和y軸比例(我在這裏x1 = 0,x2 = 4, y1 = 0,y2 = 45),這樣我就可以得到該屏蔽線的x和y軸點。任何方法來做到這一點?提前致謝。從python-opencv中獲取圖像的x,y點

下面是我使用的代碼。

import numpy as np 
import cv2 

img = cv2.imread('linearline.png', 1) 
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 
lower_range = np.array([18, 100, 100], dtype=np.uint8) 
upper_range = np.array([38, 255, 255], dtype=np.uint8) 
mask = cv2.inRange(hsv, lower_range, upper_range) 
edges = cv2.Canny(mask,50,150,apertureSize = 3) 
cv2.imshow('edgesimage',edges) 


print img.shape[1] 
print img.shape 
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=100) 


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), 3, cv2.LINE_AA) 

cv2.imshow('result', img) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

我不能上傳我的linearline.png圖形,但它是一種x-y圖。

編輯:這是我使用link

+0

那麼你的輸出是一行嗎? –

+0

這段代碼的輸出是一個蒙版行,但我需要那個蒙版行 – MargS

回答

2

樣本圖像您已經有他們在這行代碼:

cv2.line(img, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 3, cv2.LINE_AA) 

爲了得到第一個座標,你只需要打印:

print lines[i][0][0] 
print lines[i][0][1] 

以獲得必須打印的第二個座標:

print lines[i][0][2] 
print lines[i][0][3] 

爲了知道什麼lines包含類型print lines

編輯:

嘿MargS,其實我誤會了你想要的東西。要明確提及你想要的內容,你首先必須提取圖表中的文字,然後找出使期望答案過於廣泛的點。

然而,我能夠使用不同的方法確定你需要的線。

我將圖像轉換爲HSV色彩空間,然後提取飽和通道。然後我申請霍夫變換線以獲得所需的線

CODE:

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 
h, s, v = cv2.split(hsv) 
ret,th = cv2.threshold(s,127,255, 0) 
cv2.imshow('th.jpg', th) 

enter image description here

lines = cv2.HoughLinesP(th,1,np.pi/180,100,minLineLength=100,maxLineGap=10) 
for line in lines: 
    x1,y1,x2,y2 = line[0] 
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2) 

cv2.imshow('houghlines5.jpg',img) 

enter image description here

編輯:

完整代碼:

import cv2 
import numpy as np 

filename = 'line.jpg' 
img = cv2.imread(filename) 
cv2.imshow('img.jpg',img) 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
cv2.imshow('gray.jpg',gray) 

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 
cv2.imshow('hsv.jpg', hsv) 

h, s, v = cv2.split(hsv) 
ret,th = cv2.threshold(s,127,255, 0) 
cv2.imshow('th.jpg', th) 

lines = cv2.HoughLinesP(th,1,np.pi/180,100,minLineLength=100,maxLineGap=10) 
for line in lines: 
    x1,y1,x2,y2 = line[0] 
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2) 

cv2.imshow(HoughLines.jpg',img) 

cv2.waitKey(0) 
cv2.destroyAllWindows() 
+0

的x,y點,因爲你必須得到一個轉換函數。因爲在圖像中,原點'(0,0)'從圖像的左上角**開始。在圖表中,它開始於**左下角** –

+0

是的。什麼轉換功能?有沒有辦法獲得這些要點? – MargS

+0

Working on it .....:D –

相關問題