当前位置: 代码迷 >> python >> 从python-opencv中的图像获取x,y点
  详细解决方案

从python-opencv中的图像获取x,y点

热度:71   发布时间:2023-06-13 15:35:15.0

我遇到了下面的代码,它使用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()
  相关解决方案