簡體   English   中英

從python-opencv中的圖像獲取x,y點

[英]Getting x,y points from image in python-opencv

我遇到了下面的代碼,它使用canny邊緣檢測和霍夫算法檢測所有行。 下面的代碼用於掩蓋我需要從哪里獲取點的線,但由於這是圖像,我不知道如何獲得x和y軸刻度(i,e這里x1 = 0,x2 = 4, y1 = 0,y2 = 45)因此我可以獲得該蒙版線的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圖,但它是一種xy圖。

已編輯:這是使用鏈接的示例圖像

你已經在這行代碼中擁有它們:

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顏色空間,然后提取飽和通道。 然后我應用Hough線變換來獲得所需的線

碼:

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)

在此輸入圖像描述

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)

在此輸入圖像描述

編輯:

完整代碼:

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()

暫無
暫無

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

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