我想使用OpenCV在Python中将CV_64FC1
类型的图像转换为CV_8UC1
。
在C ++中,使用convertTo
函数,我们可以使用以下代码片段轻松转换图像类型:
image.convertTo(image, CV_8UC1);
我在互联网上搜索但无法找到任何没有错误的解决方案。 Python OpenCV中的任何函数都可以转换它吗?
答案 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)
完成。