2015-12-03 199 views
1

我通過一個實時兩個相機流提取2個blob的x位置。我可以得到第一個x位置沒有問題,因爲它是作爲元組給出的(ex = ... object at(455,69))。問題是我需要第二個blob左下角的x位置,但它返回爲一個numpy數組,'blob.x'不起作用。我怎樣才能得到numpy數組的x位置?任何幫助/指導非常感謝。從numpy數組中提取X座標

我收到以下錯誤: ValueError:具有多個元素的數組的真值是不明確的。使用a.any()或a.all()

from SimpleCV import * 
def getscoreforrgb(rgb): 
    return rgbmap[rgb] 


mog1 = MOGSegmentation(history = 200, nMixtures = 5, backgroundRatio = 0.9, noiseSigma = 16, learningRate = 0.9) 
mog0 = MOGSegmentation(history = 200, nMixtures = 5, backgroundRatio = 0.9, noiseSigma = 16, learningRate = 0.9) 
cam1 = SimpleCV.Camera(1, {'width': 640, 'height': 480 }) 
cam0 = SimpleCV.Camera(0, {'width': 640, 'height': 480 }) 
pixcol = Image('/home/pi/Darts/score/scoreboardpy.png') 



while True: 

    frame1 = cam1.getImage() 
    frame0 = cam0.getImage().flipHorizontal() 
    mog1.addImage(frame1) 
    mog0.addImage(frame0) 
    segmentedImage1 = mog1.getSegmentedImage() 
    segmentedImage0 = mog0.getSegmentedImage() 


#### second blob below, does not print x position  

    blobs0 = segmentedImage0.findBlobs() 
    if blobs0 is not None: 
      blobs0.sortArea() 
      blobs0[-1].draw(Color.BLUE, width=4) 
      first_blob = blobs0[-1] 
      bottomLeftCorner = second_blob.bottomLeftCorners() 
      print bottomLeftCorner 
      if bottomLeftCorner: 
        print bottomLeftCorner.x, 
        y = int(bottomLeftCorner.x) 
        print y * 2, 'Y' 
        y2 = y * 2 

#### First blob below, code prints x position  

    blobs1 = segmentedImage1.findBlobs() 
    if blobs1 is not None: 
      blobs1.sortArea() 
      blobs1[-1].draw(Color.RED, width=4) 
      second_blob = blobs1[-1] 
      if second_blob: 
        print second_blob.x, 
        x = int(second_blob.x) 
        print x * 2, 'X' 
        x2 = x * 2 


      colrgb = pixcol[x2, y2] 
      print colrgb 
+0

哪一行會拋出錯誤? – Julien

+0

當我嘗試將'bottomLeftCorner.x'作爲'y2'輸入到'colrgb = pixcol [x2,y2]' –

+0

這發生在多行中。哪條確切線?它應該在錯誤信息中說。 – Julien

回答

1

y2不會,如果blobs0 is None定義,在這種情況下,你可能不希望反正做任何事情。

我建議你把一切都在一個單一的if塊:

blobs0 = segmentedImage0.findBlobs() 
blobs1 = segmentedImage1.findBlobs() 
if blobs0 is not None and blobs1 is not None: 
    # all your code here 

還你似乎在第一塊使用second_blob代替first_blob。你也許應該明白你的代碼在做什麼,而不是盲目地使用一些舊代碼塊,希望它能起作用。

+0

謝謝,我剛剛得到它的工作,並不知道如何重組它。我已經清理了它,原來的問題仍然存在,'print bottomLeftCorner.x'後我得到錯誤''numpy.ndarray'對象沒有屬性'x''。檢索此x位置是總體目標 –

+0

您需要知道您正在使用哪個對象。閱讀你正在使用的函數的文檔,它會告訴你他們返回的是什麼類型。考慮到你的錯誤信息,它看起來像座標不是以成員'x'和'y'的結構或類的形式返回,而是作爲'np.array'返回。我的猜測是'x,y = bottomLeftCorner'應該可以工作。 – Julien