簡體   English   中英

使用opencv的matlplotlib提供具有相同像素值的不同圖像

[英]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顯示之前,應將mud1newuint8

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.

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