将图像从CV_64F转换为CV_8U

Jaz*_*azz 10 c++ python opencv numpy

我想使用OpenCV 将类型的图像转换CV_64FC1CV_8UC1Python.

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

image.convertTo(image, CV_8UC1);
Run Code Online (Sandbox Code Playgroud)

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

fro*_*tto 15

您可以将其转换为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
Run Code Online (Sandbox Code Playgroud)

似乎OpenCV Python API也接受Numpy数组.我没有测试过它.请测试一下,让我知道结果.


Ani*_*wal 7

对于出现黑屏或大量噪音的情况,您需要先对图像进行标准化,然后再转换为 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
Run Code Online (Sandbox Code Playgroud)

现在图像在 0 到 255 之间,我们可以转换为 8 位整数。

new_img = np.uint8(img)
Run Code Online (Sandbox Code Playgroud)

这也可以通过 来完成img.astype(np.uint8)