简体   繁体   English

在python opencv中查找图像的所有X和Y坐标

[英]Finding all the X and Y coordinates of an image in python opencv

I am a beginner in opencv-python.我是 opencv-python 的初学者。 I want to get all the X and Y coordinates of for the region of the interest mentioned in the code and store it in an array.我想获取代码中提到的感兴趣区域的所有 X 和 Y 坐标,并将其存储在一个数组中。 Can anyone give me an idea on how to proceed?谁能给我一个如何继续的想法? I was able to run the code, but is not showing any results.我能够运行代码,但没有显示任何结果。

Image for detecting all the X and Y coordinates用于检测所有 X 和 Y 坐标的图像

The sample code i wrote is written below,我写的示例代码写在下面,

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

In your code you are using a for loop which is time consuming.在您的代码中,您使用的是耗时的for循环。 You could rather make use of the fast and agile numpy library.您宁愿使用快速灵活的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])
  • I used the numpy.where() method to retrieve a tuple indices of two arrays where the first array contains the x-coordinates of the white points and the second array contains the y-coordinates of the white pixels.我使用 numpy.where() 方法来检索两个数组的元组索引,其中第一个数组包含白点的 x 坐标,第二个数组包含白色像素的 y 坐标。

indices returns: indices回报:

(array([  1,   1,   2, ..., 637, 638, 638], dtype=int64),
 array([292, 298, 292, ...,  52,  49,  52], dtype=int64))
  • I then used the zip() method to get a list of tuples containing those points.然后我使用zip()方法来获取包含这些点的元组列表。

Printing coordinates gives me a list of coordinates with edges:打印coordinates给了我一个带边缘的坐标列表:

[(1, 292), (1, 298), (2, 292), .....(8, 289), (8, 295), (9, 289), (9, 295), (10, 288)] 

this post lets you know how to get the pixel of an image http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_basic_ops/py_basic_ops.html这篇文章让你知道如何获取图像的像素http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_basic_ops/py_basic_ops.html

if you just iterate over the image in a nested for-loop you can perform whatever operation you want on said pixel eg, add x and y to an array if the colour isnt white如果您只是在嵌套的 for 循环中迭代图像,您可以对所述像素执行任何您想要的操作,例如,如果颜色不是白色,则将 x 和 y 添加到数组中

EDIT: i had to read up on what Chris commenting on the post meant by XY Problem but i agree, is there something youve tried and hasnt worked that youd like us to help fix?编辑:我必须阅读 Chris 对 XY 问题所指的帖子发表的评论,但我同意,是否有您尝试过但没有奏效的事情希望我们帮助修复?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM