Python 带有opencv的matlplotlib提供具有相同像素值的不同图像
我一直在尝试稍微修改图像的像素,但是颜色变了。因此,我将每个像素乘以1,然后看到结果 这是我的密码Python 带有opencv的matlplotlib提供具有相同像素值的不同图像,python,opencv,matplotlib,Python,Opencv,Matplotlib,我一直在尝试稍微修改图像的像素,但是颜色变了。因此,我将每个像素乘以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
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\u integers
返回的对象是int64
,而加载的图像是uint8
,因此当将两者相乘时,mud1new
成为int64
数组。使用时,它需要以下类型
- 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)