![](/img/trans.png)
[英]Changing of pixel values after writing the same image using imwrite opencv python function
[英]matlplotlib with opencv gives a different image with the same pixel values
我一直在嘗試稍微修改圖像的像素,但是顏色變得失真了。 因此,我將每個像素乘以1,然后看到結果。
這是我的代碼
import numpy as np
from matplotlib import pyplot as plt
import cv2
mud1 = cv2.imread('mud.jpeg')
print mud1.shape
mask = np.random.random_integers(1,1,size=(81,81,3))
print mask.shape
print mask[21][21][2]
print mud1[21][21][2]
mud1new = np.multiply(mud1,mask)
print mud1new[21][21][2]
plt.subplot(121),plt.imshow(mud1),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(mud1new),plt.title('Masked')
plt.xticks([]), plt.yticks([])
plt.savefig('problem.jpeg')
plt.show()
像素保持不變,但是我看到的圖像有所不同。
問題是因為np.random.random_integers
返回的對象是int64
而您加載的圖像是uint8
所以當您將兩者相乘時, mud1new
會成為一個int64
數組。 使用imshow
,需要以下類型
- MxN –要映射的值(浮點數或整數)
- MxNx3 – RGB(浮點型或uint8)
- MxNx4 – RGBA(浮點型或uint8)
要解決此問題,在使用imshow
顯示之前,應將mud1new
為uint8
mud1new = mud1new.astype(np.unit8)
plt.imshow(mud1new)
您還可以將mud1new
轉換為float
但這將要求所有值都應介於0和1之間,因此您必須將所有值除以255。
MxNx3和MxNx4浮點數組的每個組件的值應在0.0到1.0的范圍內。
mud1new_float = mud1new.astype(np.float) / 255.0;
plt.imshow(mud1new_float)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.