FindContours not detecting light colored points
Question:
I am trying to detect points from a scatter plot and get the location of those points. For that I am trying to use OpenCV findContours
function, but for some reason, its not able to detect and draw contours for light colored points on the graph
Here’s my code-
img = cv2.imread('808.png')
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# finding contours/shapes
_, threshold = cv2.threshold(imgGray, 127, 255, cv2.THRESH_BINARY)
# using a findContours() function
contours, _ = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
i = 0
# list for storing names of shapes
for contour in contours:
if i == 0:
i = 1
continue
approx = cv2.approxPolyDP(
contour, 0.01 * cv2.arcLength(contour, True), True)
cv2.drawContours(img, [contour], 0, (0, 0, 0), 5)
# finding center point of shape
M = cv2.moments(contour)
if M['m00'] != 0.0:
x = int(M['m10']/M['m00'])
y = int(M['m01']/M['m00'])
cv2.imshow('shapes', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
And here are the results – 1st is the input and 2nd is the result
As seen clearly, the function detects and draws correct contours around dark colored points but the light colored points are not getting detected properly. Any help on this or in general the method to do the entire (detecting points and then getting the values from scatter plots) will be much appreciated. Thanks!
Answers:
I am trying to detect points from a scatter plot and get the location of those points. For that I am trying to use OpenCV findContours
function, but for some reason, its not able to detect and draw contours for light colored points on the graph
Here’s my code-
img = cv2.imread('808.png')
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# finding contours/shapes
_, threshold = cv2.threshold(imgGray, 127, 255, cv2.THRESH_BINARY)
# using a findContours() function
contours, _ = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
i = 0
# list for storing names of shapes
for contour in contours:
if i == 0:
i = 1
continue
approx = cv2.approxPolyDP(
contour, 0.01 * cv2.arcLength(contour, True), True)
cv2.drawContours(img, [contour], 0, (0, 0, 0), 5)
# finding center point of shape
M = cv2.moments(contour)
if M['m00'] != 0.0:
x = int(M['m10']/M['m00'])
y = int(M['m01']/M['m00'])
cv2.imshow('shapes', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
And here are the results – 1st is the input and 2nd is the result
As seen clearly, the function detects and draws correct contours around dark colored points but the light colored points are not getting detected properly. Any help on this or in general the method to do the entire (detecting points and then getting the values from scatter plots) will be much appreciated. Thanks!