在OpenCV中将uchar类型的Mat转换为float类型的Mat?

39
在OpenCV中,如果我有一个包含uchar数据的Mat img,如何将数据转换为float?是否有可用的函数?谢谢。

在Python中,由于图像是NumPy数组,因此您可以使用img = img.astype(np.float32) - Burak
2个回答

67

如果你是指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是用于单通道(C1,即灰度图像)浮点值(32F)像素的。

CV_8UC1是用于单通道(C1,即灰度图像)无符号字符(8UC)值的。

更新2:
根据Arthur Tacca的说法,只有CV_32F是正确的(或者假设是CV_8U),因为convertTo不应该改变通道数。这听起来很合理对吧?然而,当我查阅opencv参考手册时,我没有找到任何关于这个问题的信息,但我同意他的观点。


请问在哪些情况下需要使用 32F8U - AHF
这实际上是我的问题,为什么我们需要使用浮点值像素和何时需要使用字符值像素。 - AHF
这取决于位深度。如果您的灰度图像具有256种不同颜色的深度,则为8UC1。典型情况是32FC1用于灰度和8UC3用于彩色。 - Barney Szabolcs
@BarnabasSzabolcs 这个方法也适用于多通道图像吗(即将CV_8UC3转换为CV_8FC3)? - David Doria
我不确定,你可以尝试使用矩阵构造函数来处理小图像以确认它是否有效。http://docs.opencv.org/2.4/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.html - Barney Szabolcs
显示剩余2条评论

10

使用cvConvert函数。在Python中:

import cv
m = cv.CreateMat(2, 2, cv.CV_8UC1)
m1 = cv.CreateMat(2, 2, cv.CV_32FC1)
cv.Convert(m, m1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接