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

0

Я переводя код, разработанный в 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

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

  • 1
    Можете ли вы быть более конкретным относительно "не работает"?
  • 0
    что произойдет (с точки зрения производительности), если вы полностью пропустите масштабный коэффициент ( 1.0/255.0 )? каков диапазон значений пикселей тогда?
Показать ещё 7 комментариев
Теги:
opencv
type-conversion
double-precision

2 ответа

2

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню