如何使用open-cv获取感兴趣区域的像素坐标?
How to get the pixel coordinates of the region of interest using open-cv?
我正在尝试获取图像中特定 roi 的像素坐标。我使用掩码创建了 roi。代码和结果如下所示。
import cv2
import numpy as np
img = cv2.imread("Inxee.jpg")
img = cv2.resize(img, (640, 480))
mask = np.zeros(img.shape, np.uint8)
points = np.array([[273,167], [363, 167], [573, 353], [63, 353]]) ##taking random points for ROI.
cv2.fillPoly(mask, [points], (100, 0, 100))
img = cv2.addWeighted(img, 0.7, mask, 0.5, 0)
values = img[np.where((mask == (100, 0, 100)).all(axis=1))]
print(values)
##cv2.imshow("mask", mask)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
result image
所以在图像中我们可以看到投资回报率。
我尝试使用
values = img[np.where((mask == (100, 0, 100)).all(axis=1))]
但在这里我只得到值而不是坐标。
那么有什么办法可以得到这些坐标吗?
要获取坐标,您可以这样做:
pixels_in_roi = [(i_x,i_y) for i_x, col in enumerate(mask) for i_y, val in enumerate(col) if val == (100,0,100)]
有更快的方法。
我不确定你最终的目标是什么,但听起来像 top-down 视图一样不扭曲这个区域可能是下一步。在这种情况下,这可能对您有所帮助:https://pyimagesearch.com/2014/08/25/4-point-opencv-getperspective-transform-example/
编辑:这是使用 np.where 的更好解决方案:
输入 'mask' 必须是一个 numpy 数组(在你的情况下它应该已经是),而不是列表。
不过 Christoph 是对的:如果您告诉我们您想要实现什么,可能有一种方法根本不需要提取索引。
感谢提供解决方案和可能性的朋友,
我刚做了,
val = np.where(mask < 0)
coordinate = list(zip(val[0], val[1]))
print(coordinate)
有了这个我得到了坐标!
谢谢!
我正在尝试获取图像中特定 roi 的像素坐标。我使用掩码创建了 roi。代码和结果如下所示。
import cv2
import numpy as np
img = cv2.imread("Inxee.jpg")
img = cv2.resize(img, (640, 480))
mask = np.zeros(img.shape, np.uint8)
points = np.array([[273,167], [363, 167], [573, 353], [63, 353]]) ##taking random points for ROI.
cv2.fillPoly(mask, [points], (100, 0, 100))
img = cv2.addWeighted(img, 0.7, mask, 0.5, 0)
values = img[np.where((mask == (100, 0, 100)).all(axis=1))]
print(values)
##cv2.imshow("mask", mask)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
result image
所以在图像中我们可以看到投资回报率。
我尝试使用
values = img[np.where((mask == (100, 0, 100)).all(axis=1))]
但在这里我只得到值而不是坐标。 那么有什么办法可以得到这些坐标吗?
要获取坐标,您可以这样做:
pixels_in_roi = [(i_x,i_y) for i_x, col in enumerate(mask) for i_y, val in enumerate(col) if val == (100,0,100)]
有更快的方法。
我不确定你最终的目标是什么,但听起来像 top-down 视图一样不扭曲这个区域可能是下一步。在这种情况下,这可能对您有所帮助:https://pyimagesearch.com/2014/08/25/4-point-opencv-getperspective-transform-example/
编辑:这是使用 np.where 的更好解决方案: 输入 'mask' 必须是一个 numpy 数组(在你的情况下它应该已经是),而不是列表。
不过 Christoph 是对的:如果您告诉我们您想要实现什么,可能有一种方法根本不需要提取索引。
感谢提供解决方案和可能性的朋友, 我刚做了,
val = np.where(mask < 0)
coordinate = list(zip(val[0], val[1]))
print(coordinate)
有了这个我得到了坐标! 谢谢!