Могу ли я использовать функцию opencv cvResize () в моем собственном двумерном массиве данных? Если да, то как? - PullRequest
1 голос
/ 30 июня 2011

Цель:

Я пытаюсь использовать функцию openCV cvResize () для повторной выборки двумерного массива. [У меня есть рабочий код в opencv, использующий cvResize, я знаю его использование] Но входной двумерный массив, который я хочу пересчитать, не считывается любым изображением с помощью openCV, используя взамен cvLoadImage () -

1.Хотите прочитать двумерный массив из имеющегося у меня текстового файла. В этом файле есть значения с плавающей запятой. Я бы открыл этот файл в этом тестовом коде с помощью библиотеки opencv, прочитал значения в двумерном массиве с плавающей точкой.

2. Затем используйте cvResize (), чтобы изменить его размер. Сначала я хочу уменьшить его - ширина / 2, высота / 2.

3. Затем я хочу увеличить его на 4 - ширина * 4, высота * 4. Это мой последний 2D массив.

4. Сохраните этот окончательный 2D-массив в текстовый файл как значения с плавающей запятой.

5. В основном я хочу использовать логику билинейной интерполяции, используемую OpenCV, но на моих собственных данных. Какой путь / какой файл я могу увидеть код для cvResize ()?

Любые указатели оценены.

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Сложность здесь заключается в том, что вы используете тип данных (двумерный массив) для хранения данных, считанных из файла, что несовместимо с тем, с чем работает cvResize() (это IplImage* помните?).

Если вы используете интерфейс C OpenCV (и, наблюдая за вашими другими вопросами, я знаю, что вы есть), после успешного чтения данных из файла в свой пользовательский тип данных (2D-массив?) Вам необходимо создатьIplImage* достаточно большой, чтобы хранить эту информацию.

IplImage * cv_data_img = cvCreateImage (cvSize (custom_data_height, custom_data_width), IPL_DEPTH_32F, 1);

и после этого у вас будетитерировать cv_data_img копирование исходных данных.

Как только cv_data_img заполнится данными, вы можете создать другие IplImage*, которые вам понадобятся для сохранения результата cvResize().

В конце вы можете выполнить итерацию полученного IplImage* и скопировать его обратно в исходный тип данных (2D-массив) или сделать с ним все, что захотите.

1 голос
/ 30 июня 2011

Вы можете использовать оболочку Mat поверх ваших пользовательских данных и затем использовать ее как обычный объект Mat. Конструктор, который вы бы использовали:

Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
...