簡體   English   中英

用1D數組求和3D數組元素

[英]Summing 3D array elements with 1D arrays

我正在將OpenCV用於計算機視覺項目,但是,我需要對圖像進行逐像素操作,這意味着需要訪問640x480圖像中的每個像素並更改其HSV值。 該圖像由3D數組X,Y和HSV值組成,因此130、230處的像素的HSV值可以為[12、26、18]或在圖像中表示:(130、230,(12, 26,18))

我需要執行一項操作,使我可以將X值添加到HSV值的V值(元素索引2)中:(130,230,( 12,26,18 ))

我可以使用兩個循環來做到這一點:

for x in range(image.width):
        for y in range(image.height/2):
            initcolor = cv.Get2D(image, y, x)
            initcolor2 = [0, 0, 10, 0]
            summed = [sum(pair) for pair in zip(initcolor, initcolor2)] 
            cv.Set2D(image, y, x, summed)

但這確實很慢,並且由於某種原因大約需要20秒才能完成整個圖像的操作。

有沒有更簡單,更快的方法來實現這一目標?

您應該做的第一件事也是最簡單的事情,就是檢查OpenCV是否可以將numpy數組作為參數。 Numpy建立在快速C算法的基礎上,該算法可以通過所謂的“向量化”操作處理數據結構上的大循環。 Python中的每個循環都會產生非常大的開銷。

另一種選擇是將這段代碼放在Cython中 ,這樣可以更好地處理緊密的循環。

如果我使用Python進行計算機視覺,我肯定會使用Numpy並盡快將數組轉換為numpy格式。 我懷疑您可能希望numpy.asarray()從PIL轉換為數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM