将图像从CV_64F转换为CV_8U

时间:2017-09-17 04:18:57

标签: python c++ numpy opencv

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

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

image.convertTo(image, CV_8UC1);

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

3 个答案:

答案 0 :(得分:12)

您可以将其转换为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数组。我没有测试过它。请测试一下,让我知道结果。

答案 1 :(得分:2)

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

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

from skimage import img_as_ubyte
cv_image = img_as_ubyte(any_skimage_image)

答案 2 :(得分: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)完成。