我正在尝试使用opencv使图像在python中显示,并在其上带有侧 Pane 。当我使用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()

这是结果图

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

甚至适用于gt_pane
我似乎无法弄清楚为什么会这样。

最佳答案

我看到发生这种情况的唯一方法是,如果两个图像之间的数据类型不一致。确保在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))

关于python - 如何停止numpy hstack在opencv中更改像素值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31276000/

10-10 17:59