这对我来说是个持续的挑战。我正在尝试使用openCV将两个3 RGB图像合并为一个6通道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 455 Traceback (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不能为一个tiff图像编写超过4个通道(RGBA),而且我没有找到另一种方法来编码这个图像。
我想创建自己的函数,用适当的头来编写二进制数据,但这比我想做的要深入得多。
openCV中是否还有一个可以使用的函数,或者另一个可以用6个通道将这个numpy数组写入tiff的库?
OpenCV在内部使用
libpng
、libtiff
等模块来编写RGB图像,因为jpg
、png
等各种图像表示格式都假定输入数组必须是单通道、3通道或4通道。提出了优化图像磁盘大小的假设。但同样的假设在6通道矩阵中也会被违背。因此,您可以使用像^{} 这样的序列化库,它通常可以用于序列化任何Python对象,在这种情况下,您希望序列化numpy矩阵,因此它可以正常工作,但是您将无法利用
png
或jpg
格式使用的压缩技术。但是,如果您关心文件的大小,并且希望使用
tiff
或png
等的内存优化,那么我建议您将6通道图像拆分为多个通道,创建2个新的3通道矩阵,并使用imwrite对它们进行保存,在读取时,读取两个图像并将它们组合为6通道图像。相关问题 更多 >
编程相关推荐