storing centers of contours

asked 2019-03-23 09:04:55 -0600

updated 2019-03-23 15:59:08 -0600

LBerger gravatar image

Hi everyone, I´m kind of new to programming and openCV so I apologise if I´m asking something obvious to you :)

I´m writing a script for object detection as a part of my thesis.

image description

I use contours to detect the holes on this object which works fine and then I find the center of each contour which I print. However, I need to store these values so that I can work with them further on. So is there a way to store the value of each center of contour separately as a variable? Further on I will be measuring the distance between all the centers to determine whether all the holes are in a correct place.

import numpy as np
import cv2

image = imread("test_picture.jpeg")

image = cv2.resize(image, (640,480))

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

blurred = cv2.GaussianBlur(gray, (5,5), 0)

thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)

edged = cv2.Canny(blurred, 50, 80)

contours = cv2.findContours(thresh, cv2.RETR_LIST,CV2_CHAIN_APPROX_SIMPLE)


for c in contours:

    M=cv2.moments(c)
    cX=int(M["m10"] / M["m00"])
    cY=int(M["m01"] / M["m00"])

    area=cv2.ContourArea(c)


    print([cX,cY])
    print(area)

    cv2.drawContours(image, [c], -1 (255,255,255), 2)


cv2.imshow("Image",image)

cv2.waitKey(0)
cv2.destroyAllWindows()

image description

Any help would be highly appreciated :)

edit retag flag offensive close merge delete

Comments

Please paste your code as text not an image

LBerger gravatar imageLBerger ( 2019-03-23 11:30:28 -0600 )edit
1

Code:

import numpy as np
import cv2

image = imread("test_picture.jpeg")
image = cv2.resize(image, (640,480))
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5,5), 0)
thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)
edged = cv2.Canny(blurred, 50, 80)
contours = cv2.findContours(thresh, cv2.RETR_LIST,CV2_CHAIN_APPROX_SIMPLE)

for c in contours:
    M=cv2.moments(c)
    cX=int(M["m10"] / M["m00"])
    cY=int(M["m01"] / M["m00"])

    area=cv2.ContourArea(c)
    print([cX,cY])
    print(area)

    cv2.drawContours(image, [c], -1 (255,255,255), 2)

cv2.imshow("Image",image)
cv2.waitKey(0)
cv2.destroyAllWindows()

like this or you want me to use a text editor of some kind?

Maikell gravatar imageMaikell ( 2019-03-23 11:42:11 -0600 )edit
1

You can declare an array by doing something like my_array = [] and then later on use the my_array.append() function. The results can be looped through using something like for i in range(0, len(my_array)):

sjhalayka gravatar imagesjhalayka ( 2019-03-23 15:15:01 -0600 )edit