我有一个 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()
答案 0 :(得分: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)