Exemplo n.º 1
0
def encontra_circulo(img, codigo_cor):
    # MAGENTA
    hsv_1, hsv_2 = aux.ranges(codigo_cor)

    # convert the image to grayscale, blur it, and detect edges
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    color_mask = cv2.inRange(hsv, hsv_1, hsv_2)

    segmentado = cv2.morphologyEx(color_mask, cv2.MORPH_CLOSE, np.ones(
        (10, 10)))

    segmentado = cv2.adaptiveThreshold(segmentado,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
                 cv2.THRESH_BINARY,11,3.5)

    kernel = np.ones((3, 3), np.uint8)

    segmentado = cv2.erode(segmentado, kernel, iterations=1)

    circles = cv2.HoughCircles(segmentado,
                               cv2.HOUGH_GRADIENT,
                               2,
                               40,
                               param1=50,
                               param2=100,
                               minRadius=5,
                               maxRadius=100)

    return circles
Exemplo n.º 2
0
def encontra_marcador(img):
    # convert the image to grayscale, blur it, and detect edges
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # Cria máscara para a cor magenta
    hsv1, hsv2 = aux.ranges('#FF00FF')
    mask = cv2.inRange(hsv, hsv1, hsv2)

    blur = cv2.GaussianBlur(mask, (5, 5), 0)
    edged = cv2.Canny(blur, 35, 125)

    # find the contours in the edged image and keep the largest one;

    cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST,
                            cv2.CHAIN_APPROX_SIMPLE)
    cnts = imutils.grab_contours(cnts)

    c = max(cnts, key=cv2.contourArea)
    # compute the bounding box of the of the paper region and return it
    return cv2.minAreaRect(c)
Exemplo n.º 3
0
    ret, frame = video1.read()
    
    if ret == False:
        print("Codigo de retorno FALSO - problema para capturar o frame")
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
    if n == "3":
        frame=cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------    
    rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    white = "#eb4034"
    white_1, white_2 = aux.ranges(white)
    branco_1 = np.array([0, 0, 210], dtype=np.uint8)
    branco_2 = np.array([255, 40, 255], dtype=np.uint8)
    mask_white = cv2.inRange(hsv, branco_1, branco_2)
    edges = cv2.Canny(gray,50,150,apertureSize = 3) 
    lines = cv2.HoughLines(mask_white,1,np.pi/180, 200) 
    
    for i in range(0, len(lines)): 
        r = lines[i][0][0]
        theta = lines[i][0][1]
        a = np.cos(theta) 

        b = np.sin(theta) 

        x0 = a*r 
def identifica_cor(frame):
    '''
    Segmenta o maior objeto cuja cor é parecida com cor_h (HUE da cor, no espaço HSV).
    '''

    # No OpenCV, o canal H vai de 0 até 179, logo cores similares ao
    # vermelho puro (H=0) estão entre H=-8 e H=8.
    # Precisamos dividir o inRange em duas partes para fazer a detecção
    # do vermelho:
    # frame = cv2.flip(frame, -1) # flip 0: eixo x, 1: eixo y, -1: 2 eixos
    frame_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    """Não sabemos se isso é RGB ou não"""
    # cor_menor = np.array([37, 50, 50])
    # cor_maior = np.array([47, 255, 255])
    """
    Utilizando uma função passada pelo professor na Atividade 2,
    podemos entregar ao programa uma lista com valores [R,G,B] e
    a função "ranges" do módulo auxiliar converte em HSV (formato)
    lido pelo openCV e devolve os dois valores que precisamos:
    cor_menor, cor_maior
    """
    cor_menor, cor_maior = aux.ranges(
        [0, 99, 7])  # devolve dois valores: hsv_menor e hsv_maior
    segmentado_cor = cv2.inRange(frame_hsv, cor_menor, cor_maior)

    #cor_menor = np.array([172, 50, 50])
    #cor_maior = np.array([180, 255, 255])
    #segmentado_cor += cv2.inRange(frame_hsv, cor_menor, cor_maior)

    # Note que a notacão do numpy encara as imagens como matriz, portanto o enderecamento é
    # linha, coluna ou (y,x)
    # Por isso na hora de montar a tupla com o centro precisamos inverter, porque
    centro = (frame.shape[1] // 2, frame.shape[0] // 2)

    def cross(img_rgb, point, color, width, length):
        cv2.line(img_rgb, (point[0] - length / 2, point[1]),
                 (point[0] + length / 2, point[1]), color, width, length)
        cv2.line(img_rgb, (point[0], point[1] - length / 2),
                 (point[0], point[1] + length / 2), color, width, length)

    # A operação MORPH_CLOSE fecha todos os buracos na máscara menores
    # que um quadrado 7x7. É muito útil para juntar vários
    # pequenos contornos muito próximos em um só.
    segmentado_cor = cv2.morphologyEx(segmentado_cor, cv2.MORPH_CLOSE,
                                      np.ones((7, 7)))

    # Encontramos os contornos na máscara e selecionamos o de maior área
    #contornos, arvore = cv2.findContours(segmentado_cor.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    contornos, arvore = cv2.findContours(segmentado_cor.copy(), cv2.RETR_TREE,
                                         cv2.CHAIN_APPROX_SIMPLE)

    maior_contorno = None
    maior_contorno_area = 0

    for cnt in contornos:
        area = cv2.contourArea(cnt)
        if area > maior_contorno_area:
            maior_contorno = cnt
            maior_contorno_area = area

    # Encontramos o centro do contorno fazendo a média de todos seus pontos.
    if not maior_contorno is None:
        cv2.drawContours(frame, [maior_contorno], -1, [0, 0, 255], 5)
        maior_contorno = np.reshape(maior_contorno,
                                    (maior_contorno.shape[0], 2))
        media = maior_contorno.mean(axis=0)
        media = media.astype(np.int32)
        cv2.circle(frame, (media[0], media[1]), 5, [0, 255, 0])
        cross(frame, centro, [255, 0, 0], 1, 17)
    else:
        media = (0, 0)

    # Representa a area e o centro do maior contorno no frame
    font = cv2.FONT_HERSHEY_COMPLEX_SMALL
    cv2.putText(frame, "{:d} {:d}".format(*media), (20, 100), 1, 4,
                (255, 255, 255), 2, cv2.LINE_AA)
    cv2.putText(frame, "{:0.1f}".format(maior_contorno_area), (20, 50), 1, 4,
                (255, 255, 255), 2, cv2.LINE_AA)

    # cv2.imshow('video', frame)
    cv2.imshow('seg', segmentado_cor)
    cv2.waitKey(1)

    return media, centro, maior_contorno_area
Exemplo n.º 5
0
while (True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    if ret == False:
        print("Codigo de retorno FALSO - problema para capturar o frame")

    # Our operations on the frame come here
    rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    #1. Transformar em HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    #2. aux
    cap_pink1, cap_pink2 = aux.ranges(pink)
    mask_pink = cv2.inRange(hsv, cap_pink1, cap_pink2)

    # Blue
    cap_blue1, cap_blue2 = aux.ranges(blue)
    mask_blue = cv2.inRange(hsv, cap_blue1, cap_blue2)

    mask = mask_blue + mask_pink

    cv2.imshow("mask", mask)

    # Display the resulting frame
    # cv2.imshow('frame',frame)
    cv2.imshow('gray', gray)

    if cv2.waitKey(1) & 0xFF == ord('q'):
h = 560 
f = (h*D)/H



while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Convert the frame to grayscale and hsv
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    

    magenta='#FF00FE'
    hsv1_m, hsv2_m = aux.ranges(magenta)
    mask_m = cv2.inRange(hsv, hsv1_m, hsv2_m)

    ciano='#00FFFF'
    hsv1_c, hsv2_c = aux.ranges(ciano)
    mask_c = cv2.inRange(hsv, hsv1_c, hsv2_c)

    
    blur_mag = cv2.GaussianBlur(mask_m,(5,5),0)
    blur_cya = cv2.GaussianBlur(mask_c,(5,5),0)
    blur = cv2.add(blur_cya, blur_mag) 

    # Detect the edges present in the image
    bordas_m = auto_canny(blur_mag)
    bordas_c = auto_canny(blur_cya)
Exemplo n.º 7
0
    # return the edged image
    return edged

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    
    if ret == False:
        print("Codigo de retorno FALSO - problema para capturar o frame")

    # Our operations on the frame come here
    bgr = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    cor_ciano = "#056bab"
    cor1_ciano, cor2_ciano = aux.ranges(cor_ciano)
    img_rgb_ciano = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    img_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    mascara_ciano = cv2.inRange(img_hsv, cor1_ciano, cor2_ciano)

    
    cor_magenta= "#90183c"
    cor1_magenta, cor2_magenta = aux.ranges(cor_magenta)
    img_rgb_magenta = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    img_hsv_magenta = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    mascara_magenta = cv2.inRange(img_hsv_magenta, cor1_magenta, cor2_magenta)    


    mascara = mascara_ciano+mascara_magenta
    # Display the resulting frame
    # cv2.imshow('frame',frame)
Exemplo n.º 8
0
import time as t
import sys
import math
import auxiliar as aux
import imutils

cap = cv2.VideoCapture(0)

img_color = cv2.imread("folha_atividade.png")
img_rgb = cv2.cvtColor(img_color, cv2.COLOR_BGR2RGB)
img_hsv = cv2.cvtColor(img_color, cv2.COLOR_BGR2HSV)

magenta = "#EA148D"
cyan = "#01AFEC"

cor1, cor2 = aux.ranges(cyan)
mag1 = np.array([170, 50, 50], dtype=np.uint8)
mag2 = np.array([200, 255, 255], dtype=np.uint8)
cy1 = np.array([100, 50, 50], dtype=np.uint8)
cy2 = np.array([110, 255, 255], dtype=np.uint8)

print(cor1, cor2)


def auto_canny(image, sigma=0.33):
    # compute the median of the single channel pixel intensities
    v = np.median(image)

    # apply automatic Canny edge detection using the computed median
    lower = int(max(0, (1.0 - sigma) * v))
    upper = int(min(255, (1.0 + sigma) * v))
Exemplo n.º 9
0
def auto_canny(image, sigma=0.33):
    # compute the median of the single channel pixel intensities
    v = np.median(image)

    # apply automatic Canny edge detection using the computed median
    lower = int(max(0, (1.0 - sigma) * v))
    upper = int(min(255, (1.0 + sigma) * v))
    edged = cv2.Canny(image, lower, upper)

    # return the edged image
    return edged


while (True):
    # MAGENTA
    hsv_m1, hsv_m2 = aux.ranges('#FF00FF')

    # CIANO
    hsv_c1, hsv_c2 = aux.ranges('#5dbcce')

    # Capture frame-by-frame
    ret, frame = cap.read()

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    #Craindo e aplicando as máscaras
    mask_m = cv2.inRange(hsv, hsv_m1, hsv_m2)
    mask_c = cv2.inRange(hsv, hsv_c1, hsv_c2)
    mask = mask_c + mask_m

    segmentado = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, np.ones((10, 10)))
Exemplo n.º 10
0
    # HoughCircles - detects circles using the Hough Method. For an explanation of
    # param1 and param2 please see an explanation here http://www.pyimagesearch.com/2014/07/21/detecting-circles-images-using-opencv-hough-circles/
    circles = None
    circles = cv2.HoughCircles(bordas,
                               cv2.HOUGH_GRADIENT,
                               2,
                               40,
                               param1=50,
                               param2=80,
                               minRadius=5,
                               maxRadius=40)
    # Our operations on the frame come here
    rgb = frame  #cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    rosa1, rosa2 = aux.ranges(rosa)
    azul1, azul2 = aux.ranges(azul)
    maskrosa = cv2.inRange(hsv, rosa1, rosa2)

    maskazul = cv2.inRange(hsv, azul1, azul2)
    masktotal = maskazul + maskrosa
    if circles is not None:
        circles = np.uint16(np.around(circles))
        for i in circles[0, :]:
            coef = 0
            # draw the outer circle
            cv2.circle(masktotal, (i[0], i[1]), i[2], (0, 255, 0), 2)
            # draw the center of the circle
            cv2.circle(masktotal, (i[0], i[1]), 2, (0, 0, 255), 3)
            print("TOTAL:", i)
            # cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
Exemplo n.º 11
0
lower = 0
upper = 1

print("Press q to QUIT")

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Convert the frame to rgb
    img_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    img_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    if cor == 'm':
        hsv1, hsv2 = aux.ranges('#FF00FF')
    elif cor == 'c':
        hsv1, hsv2 = aux.ranges('#00FFFF')

    mask = cv2.inRange(img_hsv, hsv1, hsv2)

    selecao = cv2.bitwise_and(img_rgb, img_rgb, mask=mask)
    segmentado_cor = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,np.ones((10, 10)))
    selecao = cv2.bitwise_and(img_rgb, img_rgb, mask=segmentado_cor)

    contornos, arvore = cv2.findContours(segmentado_cor.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    cv2.drawContours(img_rgb, contornos, -1, [0, 0, 255], 3);

    # cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
    font = cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(img_rgb,'Press q to quit',(0,50), font, 1,(255,255,255),2,cv2.LINE_AA)
Exemplo n.º 12
0
def identifica_cor(frame):
    '''
    Segmenta o maior objeto cuja cor é parecida com cor_h (HUE da cor, no espaço HSV).
    '''

    colorpicker = widgets.ColorPicker(concise=False,
                                      description='Escolha uma cor',
                                      value='#01ff13',
                                      disabled=False)

    hsv1, hsv2 = aux.ranges(colorpicker.value)

    # No OpenCV, o canal H vai de 0 até 179, logo cores similares ao
    # vermelho puro (H=0) estão entre H=-8 e H=8.
    # Precisamos dividir o inRange em duas partes para fazer a detecção
    # do vermelho:
    # frame = cv2.flip(frame, -1) # flip 0: eixo x, 1: eixo y, -1: 2 eixos
    frame_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    #cor_menor = np.array([52, 50, 50])
    #cor_maior = np.array([62, 255, 255])
    segmentado_cor = cv2.inRange(frame_hsv, hsv1, hsv2)

    #cor_menor = np.array([172, 50, 50])
    #cor_maior = np.array([180, 255, 255])
    #segmentado_cor += cv2.inRange(frame_hsv, cor_menor, cor_maior)

    # Note que a notacão do numpy encara as imagens como matriz, portanto o enderecamento é
    # linha, coluna ou (y,x)
    # Por isso na hora de montar a tupla com o centro precisamos inverter, porque
    centro = (frame.shape[1] // 2, frame.shape[0] // 2)

    def cross(img_rgb, point, color, width, length):
        cv2.line(img_rgb, (point[0] - length / 2, point[1]),
                 (point[0] + length / 2, point[1]), color, width, length)
        cv2.line(img_rgb, (point[0], point[1] - length / 2),
                 (point[0], point[1] + length / 2), color, width, length)

    # A operação MORPH_CLOSE fecha todos os buracos na máscara menores
    # que um quadrado 7x7. É muito útil para juntar vários
    # pequenos contornos muito próximos em um só.
    segmentado_cor = cv2.morphologyEx(segmentado_cor, cv2.MORPH_CLOSE,
                                      np.ones((7, 7)))

    # Encontramos os contornos na máscara e selecionamos o de maior área
    #contornos, arvore = cv2.findContours(segmentado_cor.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    contornos, arvore = cv2.findContours(segmentado_cor.copy(), cv2.RETR_TREE,
                                         cv2.CHAIN_APPROX_SIMPLE)

    maior_contorno = None
    maior_contorno_area = 0

    for cnt in contornos:
        area = cv2.contourArea(cnt)
        if area > maior_contorno_area:
            maior_contorno = cnt
            maior_contorno_area = area

    # Encontramos o centro do contorno fazendo a média de todos seus pontos.
    if not maior_contorno is None:
        cv2.drawContours(frame, [maior_contorno], -1, [0, 0, 255], 5)
        maior_contorno = np.reshape(maior_contorno,
                                    (maior_contorno.shape[0], 2))
        media = maior_contorno.mean(axis=0)
        media = media.astype(np.int32)
        cv2.circle(frame, (media[0], media[1]), 5, [255, 0, 0])
        cross(frame, centro, [0, 255, 0], 1, 17)
    else:
        media = (0, 0)

    # Representa a area e o centro do maior contorno no frame
    font = cv2.FONT_HERSHEY_COMPLEX_SMALL
    cv2.putText(frame, "{:d} {:d}".format(*media), (20, 100), 1, 4,
                (255, 255, 255), 2, cv2.LINE_AA)
    cv2.putText(frame, "{:0.1f}".format(maior_contorno_area), (20, 50), 1, 4,
                (255, 255, 255), 2, cv2.LINE_AA)

    # cv2.imshow('video', frame)
    cv2.imshow('seg', segmentado_cor)
    cv2.waitKey(1)

    return media, centro, maior_contorno_area