cv2.imshow与numpy.dstack核心转储

5 投票
1 回答
1330 浏览
提问于 2025-04-17 14:38

我想把两张图片叠在一起,这样就能在一个窗口里同时显示它们。第一张是原始的三通道图片,第二张是灰度版本。我用 cv2.cvtColor 做了颜色转换,然后用 numpy.dstack 把它变回三通道的。可是当我尝试用 cv2.imshow 显示的时候,出现了“core dumped”的错误。我是不是漏掉什么了?我需要确保两张图片的通道数相同,才能用 numpy.hstack 把它们叠在一起。这种情况发生在一台64位的Ubuntu机器上。

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 个回答

2

正如评论中提到的,试试用 cv2.merge,因为它的处理方式和 np.dstack 不太一样:

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

可以查看 @fraxel链接了解更多信息

撰写回答