转换 uint8 到 int16

问题描述 投票:0回答:1

我正在尝试将 uint8 图像转换为 int16 以适合的格式保存。 img5 显示正确,但转换为 int16 后,图像只是灰色。

img5 = img1Reg.copy()
cv2.imshow("img5", img5)

integer_array = img5.astype(np.int16)

cv2.imshow("integer_array", integer_array)

hdr_primary = fits.Header()
n = np.zeros((801, 1201), dtype=np.int16)
primary_hdu = fits.PrimaryHDU(integer_array, header=hdr_primary)
hdu_list = fits.HDUList([primary_hdu])
hdu_list.writeto('my_file.fit', overwrite=True)

我尝试了几件事,但最成功的是使用归一化函数,但图像没有显示任何对比度,看起来很平坦,背景不再是黑色(天文图像)。

img_normalized = cv2.normalize(img5, None, 0, 32000, cv2.NORM_MINMAX, dtype=cv2.CV_32F)
integer_array = img_normalized.astype(np.int16)

转换为 int16 后,我是否可以根据 img5 获得锐利/黑色背景? 任何帮助将不胜感激。

python image opencv data-conversion
1个回答
0
投票

用途:

integer_array = (img5.astype(np.float32)/255.0*65535.0-32768.0).astype(np.int16)

这会将您的 0,255 范围 (uint8) 适当地缩放到 -32768,32767 (int16) 范围。

© www.soinside.com 2019 - 2024. All rights reserved.