【发布时间】:2018-04-17 07:44:41
【问题描述】:
我正在尝试将 RGB 图像转换为 YUV 空间,然后尝试添加颜色阈值以创建二进制图像。
我这样做如下:
img = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
b_channel = cv2.cvtColor(img, cv2.COLOR_RGB2Lab)[:, :, 2]
l_channel = cv2.cvtColor(img, cv2.COLOR_RGB2LUV)[:, :, 0]
s_channel = cv2.cvtColor(img, cv2.COLOR_BGR2HLS)[:, :, 2]
s_binary = np.zeros_like(s_channel)
s_binary[(s_channel > s_thresh_min) & (s_channel <= s_thresh_max)] = 1
b_binary = np.zeros_like(b_channel)
b_binary[(b_channel > b_thresh_min) & (b_channel <= b_thresh_max)] = 1
l_binary = np.zeros_like(l_channel)
l_binary[(l_channel > l_thresh_min) & (l_channel <= l_thresh_max)] = 1
combined_binary = np.zeros_like(b_binary)
combined_binary[(l_binary == 1) | (b_binary == 1) | (s_binary == 1)] = 1
f, ax1 = plt.subplots(1, 1, figsize=(10, 5))
ax1.imshow(combined_binary)
这一切都很好,我可以在屏幕上看到二进制图像。
但是,当我尝试使用 cv2.imwrite 将其保存在磁盘上时,我得到一个黑色图像。
cv2.imwrite(file_name, combined_binary)
我真的很困惑为什么 imshow 和 imwrite 之间会发生这种变化。
有什么提示吗?
谢谢
【问题讨论】:
-
我很困惑,为什么将它传递给 YUV,然后再传递给其他 3 个颜色空间(来自 RGB 而不是 YUV)?紫色和黄色的图像是
combined_binary吗?什么是filename分机?combined_binary是 np.uint8` 类型的吗? -
我只是在尝试转换成不同的色彩空间。我什至尝试只使用 RGB(YUV 没有颜色)但同样的问题。
-
“我得到一张黑色图像。” ——不,你没有。您会使用 2 种颜色获得图像——全黑(强度 0)和“稍微不那么全黑”(强度 1)。当然,这些对于人类来说是很难通过视觉来区分的。这两个函数的不同行为是由于它们的不同意图。一个用于按原样存储图像,另一个用于将其可视化,以便人类可以清楚地看到它(因此是假色)。
-
是的,你是对的。正如下面答案中所建议的,我将 numpy 数组乘以 255 并且能够看到图像。我只是想确保后处理步骤有效并且我得到一个有效的图像,然后再将它提供给网络。谢谢你的建议。
-
@blackbug 这就是我询问类型的原因。可能它是一个浮点数,它的值从 0.0-1.0 。或者可能是因为是二进制的......它是真值或假值(在很多情况下是 0 和 1)
标签: python opencv computer-vision