带有opencv的matlplotlib给出了具有相同像素值的不同图像

时间:2017-01-25 17:06:53

标签: python opencv matplotlib

我一直试图略微修改图像的像素,但颜色变得扭曲。所以,我将每个像素乘以1并查看结果。enter image description here

这是我的代码

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()

像素保持不变,但我看到的图像不同。

1 个答案:

答案 0 :(得分:2)

问题是因为app.get('/zoopla', function(req, res){ request(zoopla, function(err, res, data){ if (err) { /* handle errors */ } var data = JSON.parse(data); var graph_url = data.area_values_url console.log(graph_url); res.render('index', { title : "zoopla", graph : graph_url}); }); }); 会返回np.random.random_integers的对象,而您加载的图片是int64,所以当您将两者相乘时,uint8会变为mud1new数组。使用imshow时,它需要以下类型

  
      
  • MxN - 要映射的值(float或int)
  •   
  • MxNx3 - RGB(float或uint8)
  •   
  • MxNx4 - RGBA(float或uint8)
  •   

要解决此问题,您应该在使用int64

显示之前将mud1new投射为uint8
imshow

您还可以将mud1new = mud1new.astype(np.unit8) plt.imshow(mud1new) 转换为mud1new,但这需要您的所有值都在0到1之间,因此您必须将所有内容除以255。

  

MxNx3和MxNx4浮点数组的每个组件的值应在0.0到1.0的范围内。

float