将图像从 CV_64F 转换为 CV_8U

新手上路,请多包涵

我想使用 OpenCV 在 Python 中将 CV_64FC1 类型的图像转换为 CV_8UC1

在 C++ 中,使用 convertTo 函数,我们可以使用以下代码片段轻松转换图像类型:

 image.convertTo(image, CV_8UC1);

我在互联网上搜索过,但找不到任何没有错误的解决方案。 Python OpenCV中的任何函数可以转换它吗?

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

阅读 3k
2 个回答

您可以将其转换为 Numpy 数组。

 import numpy as np

# Convert source image to unsigned 8 bit integer Numpy array
arr = np.uint8(image)

# Width and height
h, w = arr.shape

似乎 OpenCV Python API 也接受 Numpy 数组。我还没有测试过。请测试它并让我知道结果。

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

对于那些出现黑屏或大量噪点的用户,您需要先对图像进行标准化,然后再转换为 8 位。这是直接使用 numpy 完成的,因为 OpenCV 使用 numpy 数组作为其图像。

在标准化之前,图像的范围是从 4267.0-4407.0 在我的例子中。现在规范化:

 # img is a numpy array/cv2 image
img = img - img.min() # Now between 0 and 8674
img = img / img.max() * 255

现在图像在 0 到 255 之间,我们可以转换为 8 位整数。

 new_img = np.uint8(img)

这也可以通过 img.astype(np.uint8) 来完成。

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

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