Ask Your Question

Revision history [back]

EGG COUNTER - HELP WITH IDEAS

I'm doing a project for school, and I started to study opencv. The goal of the project is to perform egg counting, where eggs can be of various colors.

I implemented a code, but I have a problem where the eggs come very close together. I used the distance algorithm, but I did not make much progress.

An example of how it is: image description

CODE:

 while(video.isOpened()):
    ret,imagem = video.read()

    cv2.line(imagem,(linhax,0),(linhax,height),(0,255,0),2)#tamanho 3 troquei pra 2 para teste
    cv2.putText(imagem,'Contador: %r' %contador,(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)


    #primeiro passo e aplicar o tom de cinza no frame(foto) capturada
    imgCinza = cv2.cvtColor(imagem,cv2.COLOR_BGR2GRAY) #

    #segundo passo e tirar os borres da imagem cinza, deixando ela suave
    imgSuave = cv2.GaussianBlur(imgCinza,(5,5),0)

    #terceiro passo e aplicar a binarizacao
    ret, imgBinarizada = cv2.threshold(imgCinza,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)


    # noise removal
    kernel = np.ones((3,3),np.uint8)#(3,3)
    opening = cv2.morphologyEx(imgBinarizada,cv2.MORPH_OPEN,kernel, iterations = 2)#2
    # sure background area
    sure_bg = cv2.dilate(opening,kernel,iterations=3)#3
    # Finding sure foreground area
    dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5)#5


    ret, sure_fg = cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0) #

    # Finding unknown region
    sure_fg = np.uint8(sure_fg)


    contorno = cv2.findContours(sure_fg.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    contorno = contorno[1]#retorna varios contornos, e posiciona no primeiro que encontrou

    for c in contorno:
        M  = cv2.moments(c)
        if  M["m00"] != 0:
            cx = int(M["m10"] / M["m00"])
            cy = int(M["m01"] / M["m00"])       

            if verificaEntradaLinha(cx, linhax):
                contador += 1


        else:
            cx,cy = 0, 0

        cv2.circle(imagem,(cx,cy),2,(255,0,0),-1)



    cv2.imshow("Binarizada",sure_fg)
    cv2.imshow("Imagem",imagem)



    key = cv2.waitKey(30)
    if key == ord("q"):
        print "Fechando a camera."
        break

He needed ideas on how to recognize the eggs with their colored colors and how to pull the eggs together to count correctly.

Thank you in advance for your attention.