我是opencv-python的初学者。我想得到代码中提到的感兴趣区域的所有X和Y坐标,并将其存储在数组中。任何人都可以给我一个关于如何进行的想法?我能够运行代码,但没有显示任何结果。
用于检测所有X和Y坐标的图像
我写的示例代码写在下面,
import cv2
import numpy as np
import matplotlib.pyplot as plt
import imutils
img = cv2.imread("/home/harikrishnan/Desktop/image.jpg",0)
img1 = imutils.resize(img)
img2 = img1[197:373,181:300] #roi of the image
ans = []
for y in range(0, img2.shape[0]): #looping through each rows
for x in range(0, img2.shape[1]): #looping through each column
if img2[y, x] != 0:
ans = ans + [[x, y]]
ans = np.array(ans)
print ans
答案 0 :(得分:1)
在您的代码中,您使用的是for
循环,这非常耗时。您可以使用快速且敏捷的numpy
库。
import cv2
import numpy as np
import matplotlib.pyplot as plt
import imutils
img = cv2.imread("/home/harikrishnan/Desktop/image.jpg",0)
img1 = imutils.resize(img)
img2 = img1[197:373,181:300] #roi of the image
indices = np.where(img2!= [0])
coordinates = zip(indices[0], indices[1])
indices
返回:
(array([ 1, 1, 2, ..., 637, 638, 638], dtype=int64),
array([292, 298, 292, ..., 52, 49, 52], dtype=int64))
zip()
方法获取包含这些点的元组列表。打印coordinates
为我提供了边缘坐标列表:
[(1, 292), (1, 298), (2, 292), .....(8, 289), (8, 295), (9, 289), (9, 295), (10, 288)]
答案 1 :(得分:0)
这篇文章让您了解如何获取图像的像素 http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_basic_ops/py_basic_ops.html
如果您只是在嵌套的for循环中迭代图像,则可以对所述像素执行任何操作,例如,如果颜色不是白色,则将x和y添加到数组
编辑:我不得不阅读Chris对XY问题的评论意见,但我同意,是否有一些你尝试过但没有工作的东西,你们希望我们帮忙修复?