这对我来说是一个持续的挑战。我正在尝试使用 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)
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用 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)
Run Code Online (Sandbox Code Playgroud)
当我运行 imwrite() 函数时,出现以下错误:
OpenCV 错误:断言失败 (image.channels() == 1 || image.channels() == 3 …
我正在尝试仅使用 Python 将两个不同的 RGB 图像组合成一个 6 通道图像(Tiff 是最好的)。
我拥有的是从普通相机拍摄的 RGB 图像以及另一个基于 SfM 重建的法线贴图的 RGB 图像。这些图像具有相同的尺寸,我只需要将一张图像叠加在另一张图像上,这样我就可以根据组合的通道信息运行图像分类。
我一直在考虑为此使用 openCV,但我对文档很着迷。我是地质学家,而不是程序员,所以我的数学技能和编程知识充其量只是平庸。
我一直在做一些挖掘,到目前为止我尝试过的是使用 OpenCV 为每个图像创建一个数组,然后使用 numpy 连接生成的矩阵并使用 PIL 将它们组合成一个图像。问题是图像显示两个图像并排或一个彼此的顶部,而不是作为 6 通道图像。
我不认为 PIL 可以做我需要它做的事情,但我不确定如何使用 openCV mixChannels 函数或者如何在 Python 中创建一个 MAT,因为 Mat::create 文档完全是用 C++ 编写的。


我在这个网站上遇到了另一个线程,但据我所知,它们也没有得到真正的回答:
我有一个二进制图像,我需要选择最近的白色像素到给定的像素坐标集.
例如,如果我单击一个像素,我需要Python搜索值大于0的最近像素,然后返回该像素的坐标.
有什么想法吗?
我想我应该添加到目前为止我所做的事情.
import cv2
import numpy as np
img = cv.imread('depth.png', 0) # reads image as grayscale
edges = cv2.Canny(img, 10, 50)
white_coords = np.argwhere(edges == 255) # finds all of the white pixel coordinates in the image and places them in a list.
# this is where I'm stuck
Run Code Online (Sandbox Code Playgroud)