我用matplotlib读了几张JP2(JPEG200)图片,得到了大数字的numpy数组,超过40000.
阅读代码:
img_blue =mpimg.imread('B02.jp2')
img_green =mpimg.imread('B03.jp2')
img_red =mpimg.imread('B04.jp2')
数据是:
[[12290 12694 13034 ..., 1968 2078 2118]
[12174 12374 12696 ..., 1998 2068 2134]
[12422 12522 12512 ..., 1990 1972 1990]
...,
[ 4268 4276 4064 ..., 0 0 0]
[ 4174 4114 3938 ..., 0 0 0]
[ 3954 4036 3906 ...,
这些数据意味着什么?
这是否意味着JP2可以包含更大的动态范围?如何将其转换为普通图像?刚刚正常化?什么是分母?
答案 0 :(得分:4)
问题:这是否意味着JP2可以包含更大的动态范围?
JPEG 2000支持任何位深度,例如16位和32位浮点像素图像,以及任何色彩空间。
问题:如何将其转换为普通图像?刚刚正常化?什么是分母?
HDR图像必须通过色调映射映射到8位图像,色调映射通常是非线性映射。不同的色调映射曲线将产生不同的结果。你可以使用OpenCV来完成它,如OpenCV tutorial on HDR image processing:
所示# Play with the gamma value to arrive at a result that you like
tonemap = cv2.createTonemapDurand(gamma=2.2)
tonemapped_img = tonemap.process(img.copy())
img_8bit = numpy.clip(tonemapped_img*255, 0, 255).astype('uint8')
答案 1 :(得分:0)
我只是将22.5除以B02,B03,B04并将其合并。
看到此页面 https://knowledge.safe.com/articles/43742/making-rgb-images-with-sentinel-data.html
我的代码是
b_r = im_b_04/22.5;
b_g = im_b_03/22.5;
b_b = im_b_02/22.5;
RGB_gt = numpy.zeros([len(b_r), len(b_r[0]), 3], np.uint8)
RGB_gt[:, :, 0] = b_r;
RGB_gt[:, :, 1] = b_g;
RGB_gt[:, :, 2] = b_b;
有效。
答案 2 :(得分:0)
import rasterio
ds = rasterio.open(path_to_jp2_image)
ds.read(1)