5

我正在尝试将两个图像堆叠在一起,所以我可以在一个窗口中显示它们。第一个图像是原始的 3 通道图像,第二个是灰色版本。我用 cv2.cvtColor 进行了颜色转换,用numpy.dstack转换回 3 通道,当我尝试cv2.imshow时,它给了我一个“核心转储”错误。我错过了什么吗?我需要两个图像具有相同数量的通道才能将它们与 numpy.hstack 堆叠。这发生在 Ubuntu 64 位机器上。

import cv2
import numpy as np

img = cv2.imread("/home/bernie/Dropbox/Python/Opencv/lena512.jpg")

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.dstack((gray,gray,gray))

#res = np.hstack((img,gray))

print gray.dtype
print gray.shape

cv2.imshow('gray',gray)
#cv2.imshow('res',res)
cv2.waitKey()

添加

另一方面,使用

gray = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)

第 7 行中,没有任何抱怨,所以我现在会坚持这一点。这意味着cv2.cvtColor结果和numpy.dstack结果之间存在差异,用于将 1 通道图像转换为具有相等值的 3 通道。

4

1 回答 1

2

正如评论中所建议的,尝试使用,cv2.merge因为显然它的步幅不同于np.dstack

gray = cv2.merge([gray]*3)

有关更多信息,请参阅@fraxel链接

于 2013-03-05T18:25:05.603 回答