1

私は現在、高校のロボット工学チームに所属しています。私の目的は、kinect を使用して、今年の試合で simplecv と openkinect を使用してボールを検出することです。私は現在、私のメンターと私が解決できないように見える問題に行き詰まっています。コードが行うことは、kinect からライブ深度マップ フィードを取得してバイナリ化し、ブロブを探して円形のブロブを見つけようとすることです。最後に、円形ブロブの上に円を描きます。問題は、コードがブロブを問題なく見つけることができますが、円形のものを見つけることができないことです。私は行き詰まっており、コミュニティの誰かが私を助けてくれることを願っています. ありがとう、これがコードと表示されているものの画像です

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()

ここに画像の説明を入力

4

1 に答える 1

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()
于 2014-02-10T00:34:12.463 に答える