Harikrishnan R
Harikrishnan R

Reputation: 57

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

I am a beginner in 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. 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

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

Upvotes: 2

Views: 69806

Answers (1)

Jeru Luke
Jeru Luke

Reputation: 21233

In your code you are using a for loop which is time consuming. You could rather make use of the fast and agile numpy library.

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.

indices returns:

(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.

Printing coordinates gives me a list of coordinates with edges:

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

Upvotes: 4

Related Questions