cv2.imshow 和 numpy.dstack 核心转储

use*_*829 5 python opencv numpy

我试图将两个图像堆叠在一起,所以我可以在一个窗口中显示两者。第一个图像是原始的 3 通道图像,第二个是灰色版本。我做了cv2.cvtColor颜色转换,转换回用3通道numpy.dstack,当我尝试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()
Run Code Online (Sandbox Code Playgroud)

添加

另一方面,使用

gray = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)
Run Code Online (Sandbox Code Playgroud)

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

ask*_*han 2

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

gray = cv2.merge([gray]*3)
Run Code Online (Sandbox Code Playgroud)

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