gpt4 book ai didi

python - 在 OpenCV Python 中编写超过 4 个 channel 的图像

转载 作者:太空宇宙 更新时间:2023-11-03 11:20:48 27 4
gpt4 key购买 nike

这对我来说是一个持续的挑战。我正在尝试使用 openCV 将两个 3 RGB 图像组合成一个 6 channel TIFF 图像。

目前我的代码如下:

import cv2
import numpy as np

im1 = cv2.imread('im1.jpg')
im2 = cv2.imread('im2.jpg')

merged = np.concatenate((im1, im2), axis=2) # creates a numpy array with 6 channels

cv2.imwrite('merged.tiff', merged)

我也尝试过使用 openCV 的 split() 和 merge() 方法并得到相同的结果

import cv2
import numpy as np

im1 = cv2.imread('im1.jpg')
im2 = cv2.imread('im2.jpg')

b1,g1,r1 = cv2.split(im1)
b2,g2,r2 = cv2.split(im2)

merged = cv2.merge((b1,g1,r1,b2,g2,r2))

cv2.imwrite('merged.tiff', merged)

当我运行 imwrite() 函数时,出现以下错误:

OpenCV Error: Assertion failed (image.channels() == 1 || image.channels() == 3 || image.channels() == 4) in cv::imwrite_, file C:\builds\master_PackSlaveAddon-win32-vc12-static\opencv\modules\imgcodecs\src\loadsave.cpp, line 455Traceback (most recent call last):  File "", line 1, in cv2.error: C:\builds\master_PackSlaveAddon-win32-vc12-static\opencv\modules\imgcodecs\src\loadsave.cpp:455: error: (-215) image.channels() == 1 || image.channels() == 3 || image.channels() == 4 in function cv::imwrite_ 

两张图片的尺寸相同 (900X1200)。我认为 openCV 不能将超过 4 个 channel (RGBA) 写入 tiff 图像,而且我没有找到另一种方法来编码该图像。

我正在考虑创建自己的函数来编写带有适当 header 的二进制数据的想法,但这比我想做的要深入得多。

openCV 中是否有另一个我可以使用的函数,或者另一个可以将此 numpy 数组写入具有 6 个 channel 的 tiff 的库?

最佳答案

OpenCV内部使用libpnglibtiff等模块写入RGB图像,如jpg等多种图像表示格式png等假设输入数组必须是单 channel 、3 channel 或4 channel 。假设是为了优化图像的磁盘大小。但是在 6 channel 矩阵中将违反相同的假设。

所以你可以使用像pickle这样的序列化库,它通常可用于序列化任何 Python 对象,在这种情况下,您想要序列化一个 numpy 矩阵,因此它可以正常工作,但是您将无法利用 png 使用的压缩技术jpg 格式。

import numpy as np
import pickle

arr = np.ones((1000, 1000, 6), dtype=np.uint8) * 255

with open("arr_dump.pickle", "wb") as f_out:
pickle.dump(arr, f_out)

with open("arr_dump.pickle", "rb") as f_in:
arr_new = pickle.load(f_in)
print arr_new.shape

但是如果你比较在意文件的大小,想使用tiff或者png等内存优化,那么我建议你拆分您的 6 channel 图像到各种 channel 并创建 2 个新的 3 channel 矩阵并在它们上使用 imwrite 来保存,并在读取时读取两个图像并将它们组合成 6 channel 图像。

关于python - 在 OpenCV Python 中编写超过 4 个 channel 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43301582/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com