Есть ли в c ++ функция, использующая opencv, которая позволяет конвертировать изображение с двойной точностью, как im2double в MATLAB?

Я перевожу код, разработанный в MATLAB, на C ++, используя OpenCV. Я загружаю изображение в формате RGB, например:

Mat img;
img = imread('path to directory', CV_LOAD_IMAGE_COLOR);

Я просто хочу преобразовать это изображение в двойную точность как im2double() делает это в MATLAB. Есть ли какая-нибудь функция, которая позволяет это делать? Могу ли я использовать convertTo() функционировать?

Я пытался сделать:

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

что не то, что я хочу. Можете ли вы сказать мне, что я делаю не так?

0

Решение

Кажется, ваш масштабный коэффициент инвертирован. Пытаться:

Mat dimg;
img.convertTo( dimg, CV_64FC3, 1.0/255.0 );
2

Другие решения

Ваш подход правильный. однако 255.0, который вы вставили, — это не максимальное значение матрицы RGB, а коэффициент масштабирования, согласно документации. Таким образом, вы, вероятно, умножаете все значения пикселей на 255, что выводит их из диапазона [0, 255]. Кроме того (в зависимости от используемой версии) было бы безопаснее создать новое значение назначения

Mat doubleImg;
img.convertTo(doubleImage, CV_64FC3);
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector