使用 cv2.equalizeHist 时出错

新手上路,请多包涵

我正在尝试使用以下代码来均衡灰度图像的直方图:

 import cv2
im = cv2.imread("myimage.png")
eq = cv2.equalizeHist(im)

引发以下异常:

 error: (-215) CV_ARE_SIZES_EQ(src, dst) && CV_ARE_TYPES_EQ(src, dst) && CV_MAT_TYPE(src->type) == CV_8UC1 in function cvEqualizeHist

opencv的版本是 2.4.2

有什么猜测吗?

原文由 Shan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

cv2.equalizeHist 仅适用于灰度(1 通道)图像。任何一个:

 im = cv2.imread("myimage.png", 0)        # load as grayscale

或者:

 im = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) # or convert

原文由 berak 发布,翻译遵循 CC BY-SA 3.0 许可协议

我得到了同样的错误,这是解决方案:

  1. 感谢:zwep( 使用 cv2.equalizeHist 时出错)和 Reti43( 图像类型 int16 到 uint8 的转换

  2. 错误

错误是因为 zwep 所说的数组的数据类型。但我们不能只使用 img.astype(np.uint8)np.uint8(img) ;它会改变形象。这是结果。

  • 原始图像(img):

在此处输入图像描述

 plt.imshow(np.uint8(img),cmap=plt.cm.gray)

在此处输入图像描述

  1. 解决方案
   img1=np.uint8(cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX))
   plt.imshow(cv2.equalizeHist(img1),cmap=plt.cm.gray)

在此处输入图像描述

PS:自适应直方图均衡化对 MRI 更好。

 clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
plt.imshow(clahe.apply(img1),cmap=plt.cm.gray)

在此处输入图像描述

原文由 Ningrong Ye 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题