[英]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.