1

ラズベリーパイに取り付けられたカメラでレーザーとフォトダイオードを追跡するプロジェクトに取り組んでいます。pi は arduino に指示を送信し、フォトダイオードから応答が得られるまでレーザーの向きを変更します。現在、私はプロセスのカメラの側面に取り組んでいます。

使用するオブジェクトの一般的な輪郭と一致させるために、画像の輪郭を見つけようとしていますが、 findContours() は画像の境界線しか提供しません。

画像を投稿できればいいのですが、担当者が足りません。キャニー エッジは、黒地に白と黒のラインです。輪郭のある画像はキャプチャされた画像ですが、境界線が描かれており、他の輪郭はありません。

これが私のコードです:

def DED(grayImg):                           #Edge Detection, returns image array

    minInt, maxInt, minLoc, maxLoc = cv2.minMaxLoc(grayImg) #Grayscale: MinIntensity, Max, and locations
    beam = cv2.mean(grayImg)    #Find the mean intensity in the img pls.
    mean = float(beam[0])
    CannyOfTuna = cv2.Canny(grayImg, (mean + minInt)/2, (mean + maxInt)/2)  #Finds edges using thresholding and the Canny Edge process.

    return CannyOfTuna


def con2z(Gray, ogImage):                           #Find contours from = Canny Edge Image, draw onto original
    lines, pyramids = cv2.findContours(Gray, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)


    gimmeGimme = cv2.drawContours(ogImage, lines, -1, (128,255,0), 3)       #draw contours on 
                #The -1 signifies ALL contours will be drawn.

    return lines

with picamera.PiCamera() as camera:
    camera.resolution = (640,480)
    out = camera.capture('output.jpg')                  # Camera start
    output = cv2.imread('output.jpg')

    grayput = cv2.cvtColor(output, cv2.COLOR_BGR2GRAY)      #Grayscale
    cv2.imwrite('gray.jpg', grayput)

    cans = DED(grayput)                                     #Canny Edge
    cv2.imwrite('Canny.jpg', cans)


    lines = con2z(grayput, output)                      # Contours please

    print(lines)
    cv2.imwrite('contours.jpg', output)

編集: ここに 2 つの写真があります http://imgur.com/EVeMVdm,QLoYa2o#0 http://imgur.com/EVeMVdm,QLoYa2o#1

4

1 に答える 1

1

findContours は、このタプル (画像、輪郭、階層) を返します。したがって、あなたの場合、findContours 関数の LHS としてこれを試してください: _, lines, pyramids = cv2.findContours

編集:
申し訳ありませんが、それは解決策ではありませんでした。
con2z 関数呼び出しでグレープットを缶に置き換えます。findContours はバイナリ イメージを想定していますが、グレープットはそうではありません。

于 2015-06-26T17:54:34.493 に答える