[英]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.