使用 cv2.imshow 读取 tif 图像

时间:2021-02-26 22:35:12

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

我有一个 tif 文件 tif file,它是一张人脸图像,这个图像是 16 位的,我正在尝试使用 dlib 测试人脸检测。但是,图像显示为黑色。我尝试的是标准化图像并将其转换为 8 位。即使在这些程序之后,当我执行 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() 

2 个答案:

答案 0 :(得分:0)

  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()))

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

答案 1 :(得分:0)

我找到的解决方案是:

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

相关问题