opencv c++:将图像矩阵从无符号字符转换为浮点数
Posted
技术标签:
【中文标题】opencv c++:将图像矩阵从无符号字符转换为浮点数【英文标题】:opencv c++: converting image matrix from unsigned char to float 【发布时间】:2015-08-08 14:36:17 【问题描述】:我在转换图像矩阵时遇到问题。我用:
Mat image = imread(image_name, 0);
将图像读入 Mat 对象。当我查看调试器时,我看到数据存储为无符号字符。
接下来,我使用 convertTo 方法将数据转换为浮点值:
Mat image_f;
image.convertTo(image_f, CV_32F);
我再次查看调试器,数据仍然是 unsigned char 类型。
我做错了什么?
【问题讨论】:
【参考方案1】:您检查的类型错误。您可能会查看image.data
,对于任何图像类型,它始终是uchar*
。
再试一次,你的类型就OK了。
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
Mat image(100, 100, CV_8UC1);
cout << image.type() << " == " << CV_8U << endl;
Mat image_f;
image.convertTo(image_f, CV_32F);
cout << image_f.type() << " == " << CV_32F << endl;
return 0;
您可以访问float
值,例如:
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
Mat m(10,10,CV_32FC1);
// you can access element at row "r" and col "c" like:
int r = 2;
int c = 3;
// 1
float f1 = m.at<float>(r,c);
// 2
float* fData1 = (float*)m.data;
float f2 = fData1[r*m.step1() + c];
// 3
float* fData2 = m.ptr<float>(0);
float f3 = fData2[r*m.step1() + c];
// 4
float* fData3 = m.ptr<float>(r);
float f4 = fData3[c];
// 5
Mat1f mm(m); // Or directly create like: Mat1f mm(10,10);
float f5 = mm(r,c);
// f1 == f2 == f3 == f4 == f5
return 0;
【讨论】:
你知道如何从 image_f 访问一些浮点值吗?通过image_f.data我只能得到uchar。以上是关于opencv c++:将图像矩阵从无符号字符转换为浮点数的主要内容,如果未能解决你的问题,请参考以下文章