复制 numpy 数组值时获取图片的负片
Getting a negative of picture when copying numpy array values
我正在尝试手动复制图像,但我这样做的结果是原始图像的负片。我似乎无法找出原因,所以请帮忙。
这是代码:
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()
问题是,当您使用 ndarray
创建 padded_image
时,您没有指定 dtype
,因此它默认为浮点数。然后你使用 imshow
显示一个浮点数组,其值在 [0, 1] 范围内未标准化,因此 imshow
自己进行某种标准化,结果是 "opposite" 颜色。 (并不是所有的浮点图像都会像那样反转。)
您可以使用
解决这个问题
padded_image = np.ndarray(shape=image.shape, dtype=image.dtype)
这应该可以解决眼前的问题。更好的解决方法是不编写自己的 copy
函数。 numpy ndarray
有一个 copy
方法,所以你可以这样做,例如
image2 = image1.copy()
我正在尝试手动复制图像,但我这样做的结果是原始图像的负片。我似乎无法找出原因,所以请帮忙。
这是代码:
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()
问题是,当您使用 ndarray
创建 padded_image
时,您没有指定 dtype
,因此它默认为浮点数。然后你使用 imshow
显示一个浮点数组,其值在 [0, 1] 范围内未标准化,因此 imshow
自己进行某种标准化,结果是 "opposite" 颜色。 (并不是所有的浮点图像都会像那样反转。)
您可以使用
解决这个问题padded_image = np.ndarray(shape=image.shape, dtype=image.dtype)
这应该可以解决眼前的问题。更好的解决方法是不编写自己的 copy
函数。 numpy ndarray
有一个 copy
方法,所以你可以这样做,例如
image2 = image1.copy()