5
我最近採取了一些代碼,基於OpenCV c + +顏色跟蹤對象,並重寫它在python綁定。OpenCV Python綁定通過圖像數據令人難以置信的緩慢迭代
整體結果和方法顯然是相同的負語法。但是,當我在視頻的每個幀上執行下面的代碼時,需要將近2-3秒才能完成,因爲C++變體(也在下面)是即時比較的,我可以在幀之間迭代的速度與我的手指可以按下鍵。
任何想法或意見?
cv.PyrDown(img, dsimg)
for i in range(0, dsimg.height):
for j in range(0, dsimg.width):
if dsimg[i,j][1] > (_RED_DIFF + dsimg[i,j][2]) and dsimg[i,j][1] > (_BLU_DIFF + dsimg[i,j][0]):
res[i,j] = 255
else:
res[i,j] = 0
for(int i =0; i < (height); i++)
{
for(int j = 0; j < (width); j++)
{
if(((data[i * step + j * channels + 1]) > (RED_DIFF + data[i * step + j * channels + 2])) &&
((data[i * step + j * channels + 1]) > (BLU_DIFF + data[i * step + j * channels])))
data_r[i *step_r + j * channels_r] = 255;
else
data_r[i * step_r + j * channels_r] = 0;
}
}
感謝
這肯定會加快速度,但我似乎無法弄清楚爲什麼結果與我的圖像的閾值更密切相關,並且它看起來應該沒有找到圖像上的綠色區域? – bluth 2010-08-22 21:50:41
我可能誤解了圖像的紅色,綠色和藍色通道的順序(從上面的代碼看來,藍色是第一個通道,紅色是最後一個通道)也許嘗試拆包「數據」數組爲「紅色,綠色,藍色= data.T」?只是一個瘋狂的猜測......我可能是完全錯誤的,那裏... – 2010-08-22 22:08:06
是的,這是我最初的想法,但改變順序不會產生不同的結果。 _RED_DIFF和_BLU的值很高,爲155,因此圖像內部不應該有很多白色像素,但仍然存在;當我把_DIFF放在255時,它幾乎全是白色的?我似乎無法理解res =(green>(_RED_DIFF + red))&(green>(_BLU_DIFF + blue))的結果。 – bluth 2010-08-22 22:19:14