How to detect bullet holes on a target

I want to know how to detect bullet holes on a target using Python and OpenCV.

I can not draw contours around them. So far I have applied the threshold, and I have the following result (Image after the threshold and binary AND):

And here is the original image: enter image description here

I don’t know which approach I should use to detect bullet holes and calculate points accordingly.

+9
python image-processing opencv
source share
1 answer

You can simply use the very simple segmentation method known as Color Segmentation in which you threshold a given RGB image to get a binary image like:

 img = cv2.imread('/Users/anmoluppal/Desktop/cAMDX.jpg') img_thresholded = cv2.inRange(img, (60, 60, 60), (140, 140, 140)) 

enter image description here

Binary image noise can be removed using the binary image open operation as:

 kernel = np.ones((10,10),np.uint8) opening = cv2.morphologyEx(img_thresholded, cv2.MORPH_OPEN, kernel) 

enter image description here

Now that you have a slightly clear idea of ​​the bullet holes, the last part is to find these outlines and draw some circle / rectangle around them to highlight the foreground area as:

 contours, hierarchy = cv2.findContours(opening.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) print len(contours) for contour in contours: (x,y),radius = cv2.minEnclosingCircle(contour) center = (int(x),int(y)) radius = int(radius) cv2.circle(img,center,radius,(0,255,0),2) # labelling the circles around the centers, in no particular order. position = (center[0] - 10, center[1] + 10) text_color = (0, 0, 255) cv2.putText(img, str(i + 1), position, cv2.FONT_HERSHEY_SIMPLEX, 1, text_color, 3) 

enter image description here

+12
source share

All Articles