如何阻止numpy hstack更改opencv中的像素值

时间:2015-07-07 17:57:30

标签: python opencv numpy image-processing

我试图使用opencv在python中显示图像,并在其上放置侧窗格。当我使用np.hstack时,主要图片变得无法识别为白色而只有少量颜色。这是我的代码:

    img = cv2.imread(filename)
    img_with_gt, gt_pane = Evaluator.return_annotated(img, annotations)
    both = np.hstack((img_with_gt, gt_pane))

    cv2.imshow("moo", both)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

这是结果图片

corrupted hstack image

但如果我查看img_with_gt它看起来是正确的。

groundtruth correct

甚至适用于gt_pane

gt pane correct

我似乎无法弄清楚为什么会这样。

1 个答案:

答案 0 :(得分:3)

我能看到发生这种情况的唯一方法是两个图像之间的数据类型是否一致。确保在return_annotated方法中,img_with_gtgt_pane都共享相同的数据类型。

您提到了为gt_pane分配空间为float64的事实。这表示[0-1]范围内的强度/颜色。将图像转换为uint8并将结果乘以255以确保两个图像之间的兼容性。如果您想保持图像不变并处理分类图像(右图),请转换为float64然后除以255。

但是,如果您希望保持方法不变,可以进行简单的修复:

both = np.hstack(((255*img_with_gt).astype(np.uint8), gt_pane))

你也可以走另一条路:

both = np.hstack((img_with_gt, gt_pane.astype(np.float64)/255.0))