使用OpenCV创建和保存16位RGB图像

时间:2020-01-09 14:36:18

标签: python image opencv image-processing format

我正在生成一个图像,其中包含RGB上某些位深度的所有可能的颜色值(在3个通道上相同的值,因此看起来是灰度的),创建易于读取的图案,此代码可能有用(它生成 uint16 NumPy数组):

import cv2
import numpy as np

w = 1824
h= 948

bits = 16
max_color = pow(2,bits)
hbar_size = round((w*h)/(max_color)) 
num_bars =  round(h/hbar_size)

color = 0

image_data = np.zeros((h, w, 3)).astype(np.uint16) 

for x in range(0,num_bars+1):
    if((x+1)*hbar_size < h):
        for j in range(0,w):
            color += 1
            for i in range(x*hbar_size , (x+1)*hbar_size): 
                #print(i)
                image_data[i, j] = color
    else:
        for j in range(0,w):
            color += 1
            for i in range(x*hbar_size , h): 
                #print(i)
                image_data[i, j] = min(color , max_color)

问题是:

当我使用cv2.imwrite('allValues.png',image_data)保存它时,我可以看到图像,它似乎是正确的,但但是它实际上是以8位深度保存的(当我用{{1}读取时) }我得到一个 uint8 NumPy数组)。

问题是:

在python的OpenCV上是否有适当的方式写入/读取 16位RGB 图像?

png格式有问题吗?

1 个答案:

答案 0 :(得分:1)

它以16位保存,但是在加载时会自动转换为8位,以便您可以在屏幕上查看它。您可以使用

绕过该功能

DB::table('devices') ->leftJoin('hotel_device','hotel_device.device_id','devices.id') ->whereNull("hotel_device.device_id") ->delete();