1

I was trying to make a mini-aimbot for my own recreational purposes (in my own game), and have decided to use OpenCV and Numpy to attempt this. What I have done is that I have gotten a mask of the targets, and now want the pixel location of the white color from the mask - so I can move my mouse and click the target.

This is the Mask In question

Basically, I want to get the pixel location of each white shape, and be able to move the mouse to the location. I do not know how to get the pixel location yet, so any help is appreciated!

1 Answer 1

5

During image segmentation, you should be able to find the center pixel of a given blob of signal with cv2.moments(contour_object). Segmenting objects from one another can be done with watershed algoritms and cv2.findcountours(image) does a pretty good job finding contours in the image. Signal dilation and contraction may be useful for your segmentation purposes if it doesn't work first shot, but yours is a pretty simple image, so have hope.

Below is a boiler from learnopencv.com that should perform in your case:

# read image through command line img = cv2.imread(args["ipimage"]) # convert the image to grayscale gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # convert the grayscale image to binary image ret,thresh = cv2.threshold(gray_image,127,255,0) # find contours in the binary image im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) for c in contours: # calculate moments for each contour M = cv2.moments(c) # calculate x,y coordinate of center cX = int(M["m10"] / M["m00"]) cY = int(M["m01"] / M["m00"]) cv2.circle(img, (cX, cY), 5, (255, 255, 255), -1) cv2.putText(img, "centroid", (cX - 25, cY - 25),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2) # display the image cv2.imshow("Image", img) cv2.waitKey(0) 
Sign up to request clarification or add additional context in comments.

3 Comments

Oh okay, thank you! I was new to this, and this works!
You can also get the upper left x,y of the bounding box of the contours.
Btw this breaks if contour area is 0; may want to include if M["m00"] != 0 after the cv2.moments(c) (tried to edit, but it got rejected)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.