【发布时间】:2011-09-12 05:31:20
【问题描述】:
在 OpenCV 中,如果我有一个包含 uchar 数据的 Mat img,我如何将数据转换为浮点数?有可用的功能吗?谢谢。
【问题讨论】:
-
在Python中,由于图片是NumPy数组,所以可以使用
img = img.astype(np.float32)。
在 OpenCV 中,如果我有一个包含 uchar 数据的 Mat img,我如何将数据转换为浮点数?有可用的功能吗?谢谢。
【问题讨论】:
img = img.astype(np.float32)。
如果你的意思是 c++,那么你有
#include<opencv2/opencv.hpp>
using namespace cv;
Mat img;
img.create(2,2,CV_8UC1);
Mat img2;
img.convertTo(img2, CV_32FC1); // or CV_32F works (too)
opencv2refman.pdf 中的详细信息。
更新:
CV_32FC1 用于 1 通道(C1,即灰度图像)浮点值 (32F) 像素
CV_8UC1 用于 1 通道(C1,即灰度图像)无符号字符 (8UC) 值。
更新 2:
根据 Arthur Tacca 的说法,只有 CV_32F 是正确的(或者可能是 CV_8U),因为 convertTo 不应更改通道数。听起来合乎逻辑吧?然而,当我查看 opencv 参考手册时,我找不到任何关于此的信息,但我同意他的看法。
【讨论】:
32F和8U
使用cvConvert 函数。在 Python 中:
import cv
m = cv.CreateMat(2, 2, cv.CV_8UC1)
m1 = cv.CreateMat(2, 2, cv.CV_32FC1)
cv.Convert(m, m1)
【讨论】: