繁体   English   中英

将图像从 CV_64F 转换为 CV_8U

[英]convert image from CV_64F to CV_8U

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

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

image.convertTo(image, CV_8UC1);

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

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

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

链接将帮助您了解数据类型和转换。 下面是对我有用的代码。

from skimage import img_as_ubyte
cv_image = img_as_ubyte(any_skimage_image)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM