物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

16bitモノクロ画像を8bitモノクロ画像に変換するコード

16bitモノクロ画像の輝度値の最小が3802、最大が11113とする。

import numpy as np
import cv2
src= cv2.imread("input.tif",-1)
src=np.add(src, -3802)
src=src*(255/(11113-3802))
dst = src.astype(np.uint8)
cv2.imwrite("output.png",dst)

注意点:

imread の引数を0 又は 1にすると、8bit モノクロ画像 又は 8bit カラー画像として読み込まれてしまう。-1だと画像のbit深度、チャンネル数は変更されない。

C++版だとcv::convertTo関数だが、python版だと型変換は numpyのastype(np.uint8) で行う。