numpy 使用OpenCV读取黑白白色图像[关闭]

lb3vh1jj  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(145)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

5天前关闭。
Improve this question
我尝试简单地读取我创建的二进制掩码图像。当我使用

bw_mask = cv2.imread('image.png')

字符串
图像被读取为一个numpy零数组,看起来像:

array([[[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ...,
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]],

   [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ...,
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]],

   [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ...,
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]],

   ...,

   [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ...,
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]],

   [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ...,
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]],

   [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ...,
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]]], dtype=uint8)


请你解释给我为什么,我真的很想深入学习的原因,但在一个明确的外行话。彩色图像打开只是作为一个典型的图像(不数组)。
如果应用这些操作,为什么可以读取它?

bw_mask = cv2.imread('image.png', cv2.IMREAD_ANYDEPTH)
bw_mask = bw_mask.view(np.int32)
img_cv_16bit = bw_mask.astype(np.uint16)
img_cv_8bit = np.clip(img_cv_16bit // 16, 0, 255).astype(np.uint8)
result = cv2.resize(img_cv_8bit, (800, 600), interpolation=cv2.INTER_CUBIC)
plt.imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB))
plt.show()


我仍然不明白为什么这是工作,我会感谢你的解释和回答。

y3bcpkx1

y3bcpkx11#

工作正常,但你应该明确表示只关心灰度:

import cv2

bw_mask = cv2.imread(
    filename='wrwoW.png',
    flags=cv2.IMREAD_GRAYSCALE,
)
print(bw_mask.min())
print(bw_mask.max())
print(bw_mask.sum())

个字符
这是特别真实的,因为(出于某种原因)您发布的图像实际上并没有以灰度保存:


的数据

wrwoW.png: PNG image data, 2340 x 1900, 8-bit/color RGBA, non-interlaced

相关问题