2014-02-05 3 views
1

В настоящее время я нахожусь в команде робототехники для своей средней школы, и моя цель - использовать наш kinect для обнаружения шаров в игре этого года с помощью simplecv и openkinect. Я в настоящее время застрял в проблеме, которую мои наставники и я не могу решить. Что делает код, так это получение корневой карты живой глубины из kinect и ее бинаризации, как только она сделала это, она ищет капли и пытается найти круговые капли. Наконец, он рисует круг по круговой капли. Проблема заключается в том, что код не может найти blobs без проблем, но он не может найти круговые. Я в тупике и надеюсь, что кто-то из сообщества сможет мне помочь. Спасибо, вот код и изображение того, что видноПроблемы с детектированием blc-blc-кода

from SimpleCV import * 
cam = Kinect() 
display = SimpleCV.Display() 
while display.isNotDone(): 
    depth = cam.getDepth().flipHorizontal() 
    img2 = cam.getImage().flipHorizontal() 

    filtered = depth.stretch(200,255) 
    segmented = filtered.binarize(200) 
    blobs = segmented.findBlobs() 
    if blobs: 
     circles = blobs.filter([b.isCircle() for b in blobs]) 
     if circles: 
      img2.drawCircle((circles[-1].x, circles[-1].y), circles[-1].radius(),SimpleCV.Color.RED,3) 
      img2.drawText("FOUND A BALL", 50,50,color=Color.RED,fontsize=48) 

    img2.sideBySide(segmented).show() 

enter image description here

+0

Предоставьте ссылку на свое изображение, кто-то с большим количеством rep отправит его в очередь для вас. – Hooked

+0

Хорошо, спасибо, что сообщили мне. http://imgur.com/btMmvGa – Tubaflub

ответ

0

Я решил эту проблему, вот новая версия кода, который работает. К сожалению, на этот раз не было экрана.

import SimpleCV 
from SimpleCV import * 
display = SimpleCV.Display() 
cam = Kinect() 
normaldisplay = True 

while display.isNotDone(): 

    if display.mouseRight: 
     normaldisplay = not(normaldisplay) 
     print "Display Mode:", "Normal" if normaldisplay else "Segmented" 

    img = cam.getDepth().flipHorizontal() 
    img2 = cam.getImage().flipHorizontal() 
    dist = img.colorDistance(SimpleCV.Color.BLACK).dilate(2) 
    segmented = dist.stretch(200,255) 
    binar = segmented.binarize(200) 
    erode = binar.erode(2) 
    blobs = erode.findBlobs() 
    if blobs: 
     circles = blobs.filter([b.isCircle(0.2) for b in blobs]) 
     if circles: 
      img.drawCircle((circles[-1].x, circles[-1].y), circles[-1].radius(),SimpleCV.Color.BLUE,3) 

    if normaldisplay: 
     img.show() 

    else: 
     segmented.show() 
Смежные вопросы