微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将图像从8位转换为10位时出现问题

如何解决将图像从8位转换为10位时出现问题

我正在尝试将8位图像转换为10位。我认为这就像更改bin值一样容易。我试过枕头和cv-python:

from PIL import Image
from numpy import asarray
import cv2

path = 'path/to/image'
img = Image.open(path)
data = asarray(img)

newdata = (data/255)*1023 #2^10 is 1024
img2 = Image.fromarray(newdata) #this fails

cv2.imwrite('path/newimage.png,newdata)

尽管cv2.imwrite成功写入了新文件,但即使bin达到1023,该文件仍被编码为8位图像。

$ file newimage.png
newimage.png: PNG Image data,640 x 480,8-bit/color RGB,non-interlaced

python或linux中是否还有另一种方法可以将8位转换为10位?

解决方法

这里有很多错误。

  1. 您没有充分理由将OpenCV(cv2.imwrite)与PIL(Image.open)混合在一起。不要这样做,因为它们使用不同的RGB / BGR顺序和约定,您会感到困惑,

  2. 您正在尝试将10位数字存储在8位向量中,

  3. 您正在尝试在PIL图像中保留3个16位RGB像素,其中will not work作为RGB图像必须在PIL中为8位。


我建议:

import cv2
import numpy as np

# Load image
im = cv2.imread(IMAGE,cv2.IMREAD_COLOR)

res = im.astype(np.uint16) * 4
cv2.imwrite('result.png',res)
,

我找到了使用pgmagick封装的python解决方案

import pgmagick as pgm

imagePath = 'path/to/image.png'
saveDir = '/path/to/save'

img = pgm.Image(imagePath)
img.depth(10) #sets to 10 bit

save_path = os.path.join(saveDir,'.'.join([filename,'dpx']))
img.write(save_path)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。