2016-02-22 22 views
1

我有設置數組元素與序列的錯誤,我不知道如何修復它。即引發錯誤的行是:Python:爲我的邊緣檢測設置一個序列錯誤的數組元素

ret[q,l] = (50,255,20) 
ValueError: setting an array element with a sequence. 

我試圖做的是從灰度圖像脫粒陣列(位於邊緣)的每一個像素更改爲綠色,但是我不斷收到此錯誤。

另外這裏是我的邊緣的剩餘部分檢測代碼:

def edgeDetect(img, threshold): 
    ret = img.copy() 
    thresh = [] 
    h = img.shape[0] 
    w = img.shape[1] 
    for y in range(1, h-2): 
     for x in range(1, w-2): 
      gx = 0 
      gy = 0 
      gx = (img.item(y, x)*0 + img.item(y + 1, x)*0 + img.item(y-1, x)*0 + img.item(y, x+1)*2 + img.item(y, x-1)*-2 + img.item(y+1, x+1)*1 + img.item(y-1, x-1)*-1 + img.item(y+1, x-1)*-1 + img.item(y-1, x+1)*1) 
      gy = (img.item(y, x)*0 + img.item(y + 1, x)*-2 + img.item(y-1, x)*2 + img.item(y, x+1)*0 + img.item(y, x-1)*0 + img.item(y+1, x+1)*-1 + img.item(y-1, x-1)*1 + img.item(y+1, x-1)*-1 + img.item(y-1, x+1)*1) 
      result = gx**2 + gy**2 
      if(result > float(threshold)**2): 
       thresh.append([y,x]) 
    for p in range(len(thresh)): 
     print() 
     q, l = thresh[p] 
     img[q,l] = (50,255,20) 
    return ret 
+0

發佈確切的錯誤消息,包括回溯。 –

+0

我會猜測:使用'img [q] [l]'而不是'img [q,l]' –

+0

你想要'img [q,l] = ...'做什麼?什麼是'img'?一個Python清單列表? 2D-Numpy-Array?一些特殊的圖像類?從你在'img'上使用的方法來看,它應該是一個Numpy數組,但是'img [q,l]'應該可以工作。 –

回答

1

你可能正在努力(RGB或BGR如果使用的OpenCV)設定的3個通道的值到一個通道陣列(即,灰度)。

換句話說,img數組的形狀是什麼?如果您的圖像是256x256像素,是形狀(256,256)還是(256,256,3)?如果是後者,您應該可以將像素值(3元組)設置爲img[row,col,:] = (r,g,b)

如果我假設img只是單通道,那麼您需要做的是將現有單通道圖像轉換爲3通道,然後設置顏色。

OpenCV的cvtColor(...)是一種將灰度圖像轉換爲BGR/RGB的簡單方法,但您可以使用直接numpy命令執行相同操作。

+0

你是對的。我試圖設置一個單通道數組的3通道值,並使用cv2.cvtColor(img,cv2.COLOR_GRAY2RGB),我可以將像素的顏色更改爲綠色。非常感謝!! – Jiying

相關問題