c++中是否有一个使用opencv的函数,它允许将图像转换为MATLAB中的im2double的双精度
Is there a function in c++ using opencv which allows to convert an image to double precision as im2double in MATLAB?
我正在使用OpenCV将MATLAB开发的一些代码翻译为c++。我正在加载RGB格式的图像,如:
Mat img;
img = imread('path to directory', CV_LOAD_IMAGE_COLOR);
我只是想把这个图像转换成双精度,就像im2double()
在MATLAB中做的那样。有没有函数可以这样做?我可以使用convertTo()
功能吗?
I tried to do:
img.convertTo(img, CV_64FC3, 255.0);
但是它不起作用。你能帮我吗?
更新:谢谢你的回答。我现在要做的是像
这样的东西int i, k;
Mat img, img_dbprec;
img = imread('path to directory', CV_LOAD_IMAGE_COLOR); //Loads the image in the RGB format
img.convertTo(img_dbprec, CV_64FC3,1.0/255.0);//Convert image to double precision
for(i=0; i<img_dbprec.rows; i++){
for(k=0; k<img_dbprec.cols; k++){
cout << (double) img_dbprec.data[img_dbprec.step[0]*i + img_dbprec.step[1]* k + 0] << " ";
cout << (double) img_dbprec.data[img_dbprec.step[0]*i + img_dbprec.step[1]* k + 1] << " ";
cout << (double) img_dbprec.data[img_dbprec.step[0]*i + img_dbprec.step[1]* k + 2] << endl;
}
}
我的输出是(我将只输入最终值):
...
150 150 150
21 21 21
85 85 85
214 213 213
22 22 22
22 22 22
214 213 213
85 85 85
21 21 21
这不是我想要的。你能告诉我我哪里做错了吗?
似乎你的比例因子是倒置的。试一试:
Mat dimg;
img.convertTo( dimg, CV_64FC3, 1.0/255.0 );
你的方法是正确的。但是,根据文档,您插入的255.0不是RGB矩阵的最大值,而是缩放因子。因此,您可能会将所有像素值乘以255,这将使它们超出[0,255]范围。另外,(取决于您使用的版本)创建一个新的目标值
会更安全。Mat doubleImg;
img.convertTo(doubleImage, CV_64FC3);
相关文章:
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 将 BGR 图像转换为 jpeg 格式的 base64 字符串
- C++ Gdi+将图像转换为灰度
- 将 BMP 图像转换为灰度
- Qmage:如何将灰色图像转换为RGB热图
- 更快地将卤化物图像转换为 opencv 垫?
- 将原始视频图像转换为VPX编码器的I420
- ROS中未定义的参考误差到OpenCV图像转换器
- 如何将图像转换为灰度 opengl c++
- 将 24 位".bmp"图像转换为黑白/单色图像的可能算法是什么?
- 在OpenCV中将灰度图像转换为单色
- RGB到XYZ,图像转换
- 如何将图像转换为C 中的RGB数据值
- OpenCV:将图像转换为C++数组
- 从两个图像转换的OpenCV
- 使用某些系数将图像转换为灰度的最快方法
- 将RGB颜色图像转换为OpenCV C 中的索引颜色图像类型
- CUDA OPENCV CVTCOLOR调用不会将图像转换为不同的格式
- 将 RGB 图像转换为 3 个 HSI 输出
- VTK 将 2D 图像转换为 3D (C++)