2013-07-26 5 views
3

Example imagePython: обнаружение черных квадратов

Я пытаюсь обнаружить черный квадрат.

Вот мой код ГНФАР ...

frame=cv2.imread('squares.jpg') 
    img=cv2.GaussianBlur(frame, (5,5), 0) 

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

    lower=np.array([0, 0, 0],np.uint8) 
    upper=np.array([10, 50, 50],np.uint8) 
    separated=cv2.inRange(img,lower,upper) 


    #this bit draws a red rectangle around the detected region 
    contours,hierarchy=cv2.findContours(separated,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 
    max_area = 0 
    largest_contour = None 
    for idx, contour in enumerate(contours): 
     area = cv2.contourArea(contour) 
     if area > max_area: 
      max_area = area 
      largest_contour=contour 
      if not largest_contour==None: 
       moment = cv2.moments(largest_contour) 
       if moment["m00"] > 1000: 
        rect = cv2.minAreaRect(largest_contour) 
        rect = ((rect[0][0], rect[0][1]), (rect[1][0], rect[1][1]), rect[2]) 
        (width,height)=(rect[1][0],rect[1][1]) 
        print str(width)+" "+str(height) 
        box = cv2.cv.BoxPoints(rect) 
        box = np.int0(box) 
        if(height>0.9*width and height<1.1*width): 
          cv2.drawContours(frame,[box], 0, (0, 0, 255), 2) 

    cv2.imshow('img',frame) 

Я затем пытается нарисовать красный квадрат вокруг обнаруженного черного региона.

код работает на желтый, оранжевый, красный и зеленый со следующими параметрами:

colours=['yellow','orange','red','green','black','white'] 
uppers=[[20,100,100],[5,100,100],[0,100,100],[???,???,???],[???,???,???]] 
lowers=[[30,255,255],[15,255,255],[6,255,255],[???,???,???],[???,???,???]] 

Я просто не могу получить черный или белый работать ...

Есть мысли?

+0

Я думаю, вы можете попробовать переключиться на белый и черный! он может работать – Khashayar

+0

У меня мало опыта работы с opencv, но значения должны быть грубо (при условии, что изображение равно 8 бит) для черного: upper: '[180, 10, 50]', lower: '[0, 0, 0] '; белый: '[180, 10, 255]', lower: '[0, 0, 205]'. Требуется финализация –

ответ

3

Ключевая интуиция заключается в том, что черный находится во всех значениях оттенка и насыщенности в HSV cylinder, но только при низких значениях. Я обнаружил, что нижняя граница [0, 0, 0] и верхняя границы [180, 255, 50] будет найти черный квадрат, например, так:

Located black box

Я должен также упомянуть, что ваш метод не будет работать для нахождения белых квадратов, по нескольким причинам:

  • Существует несколько белых квадратов. Ваш метод выбирает только самый большой контур, который означает, что только один квадрат может быть обнаружен на каждый цвет.
  • Было бы трудно отличить «белые квадраты» от цвета бумаги, на которой они напечатаны. Вероятно, вы получите единственный контур, соединяющий квадрат и полоску бумаги по бокам.
Смежные вопросы