簡體   English   中英

將數組保存為 cv2 中的圖像

[英]Saving Array as Image in cv2

我正在嘗試使用 python cv2 修改圖像。 因此,我將圖像導入 python 並將其表示為數組。 然后我將圖像的紅色通道更改為全0,然后將更改后的數組保存到圖像中。 在這里我發現了問題,當我加載更改后的圖像時,更改后的圖像的紅色通道不全為 0(但它必須全為 0 對嗎?因為我已經做了這個過程)。 我感到很困惑。 我做錯什么了嗎?

這是代碼:

im = cv2.imread("original.jpg",1)

[h,w,c] = im.shape
//print(im[:,:,0])

img2 = im.copy()

for i in range(0,h):
    for j in range(0,w):
        img2[i,j,0] = 0

cv2.imwrite("changed.jpg", img2)

這是原始的紅色通道

[[ 41  17  40 ...  61  82 104]
 [ 48  31  27 ...  76  51  38]
 [ 61  58  29 ...  57  53 109]
 ...
 [123 140 147 ...  95  88  74]
 [133 160 155 ...  85  83  89]
 [ 96  78  84 ...  43  47  38]]

這是更改后的紅色通道(它必須全為 0,但不是)

[[ 9  0 10 ...  0  9 30]
 [10  0  0 ...  7  0  0]
 [15 14  0 ...  0  0 19]
 ...
 [ 0  1  5 ... 13  4  0]
 [ 9 31 21 ... 13 12 15]
 [ 0  0  0 ...  0  0  0]]

我在代碼中看到了幾個需要解決的問題:

  • 在 Python 中,注釋以#開頭,而不是附加代碼段中的//
  • 使用嵌套的 for 循環遍歷圖像是我們可以采用的最慢的方法。 嘗試尋找 numpy 方法來完成相同的工作,而不是使用嵌套的 for 循環。 在大多數情況下,numpy 例程要快得多。
  • OpenCV 遵循 BGR 約定而不是 RGB 約定。 因此,要訪問紅色通道,您需要獲取顏色數組中的第三個元素而不是第一個。

修復問題后,您的代碼可能如下所示:

im = cv2.imread("original.jpg",1)

im[:,:,2] = 0

cv2.imwrite("changed.jpg", im)

暫無
暫無

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

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