Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在OpenCV中将uchar垫转换为浮动垫?_C++_Opencv - Fatal编程技术网

C++ 在OpenCV中将uchar垫转换为浮动垫?

C++ 在OpenCV中将uchar垫转换为浮动垫?,c++,opencv,C++,Opencv,在OpenCV中,如果我有一个包含uchar数据的Mat img,如何将数据转换为浮点?有可用的功能吗?谢谢。使用cvConvert功能。在Python中: import cv m = cv.CreateMat(2, 2, cv.CV_8UC1) m1 = cv.CreateMat(2, 2, cv.CV_32FC1) cv.Convert(m, m1) 如果你是C++,那么你就有了< /P> #include<opencv2/opencv.hpp> using namespace

在OpenCV中,如果我有一个包含uchar数据的Mat img,如何将数据转换为浮点?有可用的功能吗?谢谢。

使用
cvConvert
功能。在Python中:

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

如果你是C++,那么你就有了< /P>

#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)
#包括
使用名称空间cv;
Mat-img;
模拟创建(2,2,CV_8UC1);
Mat-img2;
img.convertTo(img2,CV_32FC1);//或CV_32F工程(也)
详情请参见opencv2refman.pdf

更新:

CV_32FC1用于单通道(C1,即灰色图像)浮点值(32F)像素

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

更新2:

根据Arthur Tacca的说法,只有
CV_32F
是正确的(或者可能是CV_8U),因为convertTo不应该改变频道的数量。听起来合乎逻辑,对吗?然而,当我查看opencv参考手册时,我找不到任何关于这方面的信息,但我同意他的观点。

你能告诉我哪里需要使用
32F
8U
这实际上是我的问题,为什么我们需要使用浮点值像素,哪里需要使用字符值像素取决于位深。如果灰度图像的深度为256种不同颜色,则为8UC1。典型的情况是32FC1表示灰度,8UC3表示颜色。@BarnabasSzabolcs也适用于多通道图像(即,将CV_8UC3转换为CV_8FC3)?我不确定,您可以使用矩阵构造器对小图像进行尝试,以确认它是否有效。