【问题标题】:convert image from CV_64F to CV_8U将图像从 CV_64F 转换为 CV_8U
【发布时间】:2018-02-25 21:17:53
【问题描述】:

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

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

image.convertTo(image, CV_8UC1);

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

【问题讨论】:

  • 你看过cv2.cvtColor吗?
  • 我认为 cv2.cvtColor 用于色彩空间转换。我也可以用它来转换图片类型吗?
  • @rayryeng 这个问题是关于使用 Python OpenCV 从 double 类型转换为 uint8 类型,使用以下答案解决,您提到的问题有不同的问题陈述。
  • 带有 OpenCV 的 Python 使用 numpy 数组作为基本数据类型。链接的答案更通用,因为它在转换之前 剪辑 数组。下面的答案没有这样做,因此,可能会发生溢出。

标签: python c++ numpy opencv


【解决方案1】:

对于出现黑屏或大量噪点的用户,您需要先对图像进行标准化,然后再转换为 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)来完成。

【讨论】:

  • 第二条语句中,需要将img除以img.max() - img.min()
  • @AdityaVerma 这不是必需的,因为img.min() 0,所以img.max() - img.min()img.max() 相同。这是因为我减去了img.min(),所以图像在0到8674之间。
  • 是的,你是对的。您实际上是在第二个语句中再次计算 img.max()。当我使用minMaxLoc() 同时计算minmax 时,我将它与我之前所做的比较。
【解决方案2】:

我遇到了类似的问题,当我尝试将图像 64F 转换为 CV_U8 时,我最终会出现黑屏。

这个link 将帮助您了解数据类型和转换。以下是对我有用的代码。

from skimage import img_as_ubyte
cv_image = img_as_ubyte(any_skimage_image)

【讨论】:

    【解决方案3】:

    您可以将其转换为 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 数组。我还没有测试过。请测试它并告诉我结果。

    【讨论】:

    • 我将 OpenCV 3.2 与 Python 3.6.2 一起使用,运行代码时出现此错误:AttributeError: module 'cv2' has no attribute 'fromarray'。
    • @Jazz 从 OpenCV 3.2 开始,似乎不需要 fromarraystackoverflow.com/questions/43923669/…
    • 在 Python 中,OpenCV Mat 对象基本上是一个 numpy 数组。它们可以互换。
    • 这不起作用:在应用np.uint8(img) 并将结果应用到cv2.equalizeHist 之后,仍然会出现与OP 中相同的错误
    猜你喜欢
    • 2023-03-05
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2018-09-22
    • 2018-05-05
    相关资源
    最近更新 更多