2016-05-17 115 views
0

我有一張臉的jpg圖片,我需要逐個像素地訪問圖片(知道每個像素的值是什麼),並使用某種DFS來更改背景顏色。Python - 從numpy數組中丟失真像素的圖像

image = Image.open("pic.jpg") 
image = np.array(image) 

首先,爲什麼數組的形狀(473,354,3)?這對我沒有意義。

當我做

plt.imshow(image.reshape(473, -1)) 
plt.show() 

我得到的圖片,看起來像以下,其中只包含紅色,藍色和黃色(以及三者的混合物?)

這意味着,數組中的值不是我可以可靠地用來做出我的邊緣檢測決定的值。

爲什麼,我該怎麼辦?

enter image description here

我想要的像素值,以反映原始圖像的真實色彩,而不是像上面這樣。

實際圖片中的背景是有點白,我希望它們和所有其他像素值保持這種方式,所以我可以實現我的算法。

回答

1

3是因爲每種顏色(藍色,綠色紅色)在數組中都有自己的入口。

對於邊緣檢測,您可能最好將圖像合攏到B & W. OpenCV具有cv2.cvtColor(image,cv2.COLOR_BGR2GRAY),可以實現這一功能。

+0

所以(473,354,3)意味着:高度是473,寬度是354,並且數組中的每個值都是一個3元組? – Jobs

+0

@準確的工作。此外,顯示的顏色不是真實圖片中的顏色,但是它是一個顯示特定顏色以獲得較高值的顏色映射。因此,如果您輸入尺寸爲(h,w,(RGB))的圖片,可能只會考慮紅色值。當(紅色)值較高時,它將顯示紅色,而低值(紅色)則顯示爲藍色。您可能應該轉換爲黑白色,並且不要直接採用顏色(或切換到黑白色圖)。 – syntonym

+0

非常感謝!這就說得通了。所以現在我已經成功完成了任務 - 將我的照片背景改爲白色。圖片的大小從60 kb下降到20 kb。你們知道爲什麼嗎?這是正常的/預期的嗎? @syntonym和charles。 – Jobs