我正在尝试手动复制图像,但是当我这样做时,结果是原始图像的负片。我似乎无法找出原因,所以请帮忙。
这是代码:
def copy(image):
padded_image = np.ndarray(shape=image.shape)
for i in xrange(0, image.shape[0]):
for j in xrange(0, image.shape[1]):
padded_image[i][j] = image[i][j]
return padded_image
这是我阅读图片的方式:
jelly_beans = io.imread("4.1.07-jelly-beans.tiff")
这就是我显示图像的方式:
def show_images(images, titles = None):
"""Display a list of images"""
n_ims = len(images)
if titles is None: titles = ['(%d)' % i for i in range(1,n_ims + 1)]
fig = plt.figure()
n = 1
for image,title in zip(images,titles):
a = fig.add_subplot(1,n_ims,n) # Make subplot
if image.ndim == 2: # Is image grayscale?
plt.gray()
plt.imshow(image)
a.set_title(title)
n += 1
fig.set_size_inches(np.array(fig.get_size_inches()) * n_ims)
plt.show()
答案 0 :(得分:4)
问题是,当您使用padded_image
创建ndarray
时,您没有指定dtype
,因此默认为浮点数。然后使用imshow
显示一个浮点数组,其值在[0,1]范围内未规范化,因此imshow
会对其自身进行某种归一化,从而导致"相反"颜色。 (并非所有浮点图像都会像这样反转。)
您可以使用
解决此问题padded_image = np.ndarray(shape=image.shape, dtype=image.dtype)
那应该解决眼前的问题。更好的解决方法是不编写自己的copy
函数。 numpy ndarray
有一个copy
方法,所以你可以做,例如,
image2 = image1.copy()