Ask Your Question

Calculating center of object

asked 2016-02-08 18:33:24 -0600

szewczukm219 gravatar image

Hello, currently I am trying to calculate the center of an object using the following code

import cv2
import numpy as np
vid = cv2.VideoCapture(0)

def processVid():
        ret, frame =
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        lower_green = np.array([70,200,200])
        upper_green = np.array([90,255,255])
        mask = cv2.inRange(hsv, lower_green, upper_green)
        res = cv2.bitwise_and(frame,frame,mask=mask)
        cv2.imshow('Masked Image',res)
        if cv2.waitKey(1) & 0xFF == ord('q'):

def getPixel(img):
    for r in range(0,479):
         for c in range(0,639):
              print img[r,c]


Currently, this code only prints out the pixel value at the row and column, as I'm having a bit of difficulty determining the best solution to what I'm trying to accomplish. I want this code to take a video feed, apply the designated filters to the video feed and then be able to determine the distance away that the object from the center of the video (i.e. if res is 640x480, I want to find the distance away from pixel @ (320,240)). Here is an example of what my current image looks like, and I want to be able to find the center of that object to the center of the video feed. What I had thought to do was to run through every pixel, and find whether it was black or colored, and then based on that be able to calculate the center. In doing this, it was a slow process (and I mean slow), not to mention I was running this off of a raspberry pi, and it is a video feed so the process would have to be almost instantaneous for accuracy in distance. I'm just curious if there is a built in OpenCV function that does this already? I haven't been able to find any documentation for this yet.

Example image of what code currently displays

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2016-02-08 19:50:25 -0600

Tetragramm gravatar image

The Moments function calculates this, and much more besides.

In this particular case, you want m10/m00 and m01/m00 as the x and y center, or perhaps it's the other way around. Make sure to set the binary image to true, and use the mask. It's much quicker.

edit flag offensive delete link more

Question Tools

1 follower


Asked: 2016-02-08 18:33:24 -0600

Seen: 1,276 times

Last updated: Feb 08 '16