我一直试图略微修改图像的像素,但颜色变得扭曲。所以,我将每个像素乘以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()
像素保持不变,但我看到的图像不同。
答案 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