c++中是否有一个使用opencv的函数,它允许将图像转换为MATLAB中的im2double的双精度



我正在使用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);

相关内容

  • 没有找到相关文章

最新更新