【问题标题】:Reading tif image using cv2.imshow使用 cv2.imshow 读取 tif 图像
【发布时间】:2021-05-29 07:04:30
【问题描述】:

我有一个 tif 文件 tif file 这是一张人脸图像,这个图像是 16 位的,我正在尝试使用 dlib 测试人脸检测。但是,图像显示为黑色。我尝试的是标准化图像并将其转换为 8bit。即使经过这些程序,当我执行 cv2.imshow 时,图像仍然是黑色的。我要做的是仅使用 cv2 以灰度显示图像中的人脸。

代码如下:

import cv2
import numpy as np

    frame = cv2.imread('nikos_face.tif', 0)
    frame = 255*(frame - frame.min())/(frame.max() - frame.min())
    frame = (frame/256).astype('uint8')
    cv2.imshow('test', frame)
    cv2.waitKey(0)  
    cv2.destroyAllWindows() 

【问题讨论】:

    标签: python python-3.x opencv image-processing tiff


    【解决方案1】:

    1. 将图像标准化为 [0-255] 范围,然后
    2. 除以 256,确保每个像素的值都小于 1,然后
    3. 转换为 8 位无符号类型,使所有像素的值为 0。

    简单的解决方案是在不进行除法的情况下进行投射:

    frame = 255*(frame - frame.min())/(frame.max() - frame.min())
    frame = frame.astype('uint8')
    

    但是,如果读入的图像一开始是整数类型,那么标准化可能已经引入了问题。在这种情况下,您按顺序对整数图像进行除法运算,导致值舍入为 0 或溢出。归一化最安全的解决方案是一步乘以正确的值:

    frame = (frame - frame.min()) * (255.0 / (frame.max() - frame.min()))
    

    这也更有效,对每个像素应用一个操作而不是两个。

    【讨论】:

    • 出于某种原因,当我使用你的答案时,它给了我 RuntimeWarning: invalid value遇到的乘法,当我做 cv2.imshow 图像仍然完全变黑时,我需要设置一些颜色图吗为了它?使用 matplotlib 以前可以正常工作,但由于我使用的是 dlib,这会使事情变得混乱
    【解决方案2】:

    我找到的解决方案是:

    frame = cv2.imread('nikos_face.tif', -1)

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 1970-01-01
      • 2019-01-04
      • 2021-11-10
      • 2021-10-14
      • 2018-11-26
      • 2016-07-25
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多