错误:尝试均衡 float64 图像时,函数 equalizeHist 中的 (-215) _src.type() == CV_8UC1

新手上路,请多包涵

我正在尝试像这样均衡 1 个单通道图像:

 img = cv2.equalizeHist(img)

但由于它是一个 float64 img,我收到以下错误:

错误:函数 equalizeHist 中的 (-215) _src.type() == CV_8UC1

我该怎么做?

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

阅读 856
2 个回答

equalizeHist函数是图像的直方图均衡化,只针对CV_8UC1类型实现,CV_8UC1是单通道8位无符号整数类型。

要将图像转换为这种类型,您可以使用函数 convertTo 和目标类型(必须是相同数量的通道)。

确保源图像具有正确的值范围,通常浮点图像被解释为 0 = 黑色和 1 = 白色,灰色范围介于两者之间,而整数图像被解释为 0 = 黑色和最大值 = 白色(这无符号 8 位类型为 255)。因此,您通常必须将源图像乘以 255 以适应范围。函数 convertTo 有一个参数可以在转换期间缩放您的值,与手动缩放相比,这可以提高您的速度。

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

所以基本上直方图均衡适用于灰度图像。所以如果你想在彩色图像上做直方图均衡,你可以使用这个代码。

 R, G, B = cv2.split(img)

output1_R = cv2.equalizeHist(R)
output1_G = cv2.equalizeHist(G)
output1_B = cv2.equalizeHist(B)

equ = cv2.merge((output1_R, output1_G, output1_B))

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

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