将 RGB 图像转换为黑白图像
Convert RGB image to black and white
我有以下 RGB 图像(形状为 (3, 50, 200)):
我想通过将图像转换为纯黑白来减小尺寸(这张图像看起来是黑白的,但实际上它有我提到的 3 个通道)。
我(在互联网的帮助下)实现了以下功能:
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = (0.2989 * r + 0.5870 * g + 0.1140 * b)
for x in range(rgb.shape[1]):
for y in range(rgb.shape[0]):
if gray[y][x]>128: #if bright
gray[y][x] = 255.0 #white
else:
gray[y][x] = 0.0 #black
return gray
那我运行:
im = cv2.imread("samples/55y2m.png")
print(im.shape)
print(rgb2gray(im).shape)
plt.imshow(rgb2gray(im))
并得到以下输出:
(50, 200, 3) #for the input
(50, 200) #for the output
为什么图片是黄色和紫色的,如何把它变成黑色和白色?
p.s。我试图将函数更改为:
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = (0.2989 * r + 0.5870 * g + 0.1140 * b)
for x in range(rgb.shape[1]):
for y in range(rgb.shape[0]):
if gray[y][x]>128:
rgb[y][x] = 255.0 #changed
else:
rgb[y][x] = 0.0 #changed
return rgb #changed
我实际上得到了纯黑白图像,但它是 3 个通道 (RGB)。所以我试着去掉最后一个轴,又变成了紫色和黄色。
你不需要这个:
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = (0.2989 * r + 0.5870 * g + 0.1140 * b)
因为你的图像已经是灰度的,这意味着 R == G == B
,所以你可以选择 GREEN 通道(或任何其他你喜欢的通道)并使用它。
是的,为 matplotlib
指定颜色图:
plt.imshow(im[:,:,1], cmap='gray')
我有以下 RGB 图像(形状为 (3, 50, 200)):
我想通过将图像转换为纯黑白来减小尺寸(这张图像看起来是黑白的,但实际上它有我提到的 3 个通道)。
我(在互联网的帮助下)实现了以下功能:
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = (0.2989 * r + 0.5870 * g + 0.1140 * b)
for x in range(rgb.shape[1]):
for y in range(rgb.shape[0]):
if gray[y][x]>128: #if bright
gray[y][x] = 255.0 #white
else:
gray[y][x] = 0.0 #black
return gray
那我运行:
im = cv2.imread("samples/55y2m.png")
print(im.shape)
print(rgb2gray(im).shape)
plt.imshow(rgb2gray(im))
并得到以下输出:
(50, 200, 3) #for the input
(50, 200) #for the output
为什么图片是黄色和紫色的,如何把它变成黑色和白色?
p.s。我试图将函数更改为:
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = (0.2989 * r + 0.5870 * g + 0.1140 * b)
for x in range(rgb.shape[1]):
for y in range(rgb.shape[0]):
if gray[y][x]>128:
rgb[y][x] = 255.0 #changed
else:
rgb[y][x] = 0.0 #changed
return rgb #changed
我实际上得到了纯黑白图像,但它是 3 个通道 (RGB)。所以我试着去掉最后一个轴,又变成了紫色和黄色。
你不需要这个:
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = (0.2989 * r + 0.5870 * g + 0.1140 * b)
因为你的图像已经是灰度的,这意味着 R == G == B
,所以你可以选择 GREEN 通道(或任何其他你喜欢的通道)并使用它。
是的,为 matplotlib
指定颜色图:
plt.imshow(im[:,:,1], cmap='gray')