Перейти к содержимому
Compvision.ru
Deff

Вырезать кусок из jpeg, сделать чёрно-белым и перевести в матрицу из 1 и 0

Recommended Posts

Приветствую вас, единомышленники!

^_^

Приветствую и прошу помощи. Плохо знаком с OpenCV, но чувствую, что с ней лучше всего решить мою задачу.

Суть: есть jpeg-файл (см. ниже уменьшенную версию), нужно:

post-502-1259925378_thumb.jpg

  • вырезать кусок изображения
  • сделать его чёрно-белым
  • составить матрицу изображения этого ч-б куска (из 1 и 0)

Как вырезать кусок примерно представляю себе, с ROI, но вот что касается реализации.. Очень туго идёт пока.

С остальным пока так же. В связи с этим и прошу у вас помощи!

Заранее благодарен

:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Приветствую вас, единомышленники!

^_^

Приветствую и прошу помощи. Плохо знаком с OpenCV, но чувствую, что с ней лучше всего решить мою задачу.

Суть: есть jpeg-файл (см. ниже уменьшенную версию), нужно:

post-502-1259925378_thumb.jpg

  • вырезать кусок изображения
  • сделать его чёрно-белым
  • составить матрицу изображения этого ч-б куска (из 1 и 0)

Как вырезать кусок примерно представляю себе, с ROI, но вот что касается реализации.. Очень туго идёт пока.

С остальным пока так же. В связи с этим и прошу у вас помощи!

Заранее благодарен

:)

Вот проект загружающий картинку, бинаризующий её и вырезающий кусок: image_loader_cv2.rar

Как читать данные из IplImage было на форуме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Огромное спасибо! Буду разбираться!)) :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возникла проблема.. :)

При запуске exe-шника (из архива) возникает ошибка с требованием файла "CV200.DLL". Не компилируется по той же причине.. Самого этого файлика у меня вообще на дисках не нашлось. Переставил OpenCV_1.1pre1a.exe, то же самое.. С чем это может быть связано?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Возникла проблема.. :)

При запуске exe-шника (из архива) возникает ошибка с требованием файла "CV200.DLL". Не компилируется по той же причине.. Самого этого файлика у меня вообще на дисках не нашлось. Переставил OpenCV_1.1pre1a.exe, то же самое.. С чем это может быть связано?

Проект для OpenCv2.0 dll и lib есть на форуме.

Но может быть DLL придется построить самому (иногда не работает на других компах).

А можно просто взять (или создать) проект под 1.1.pre1 и вставить туда текст программы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И всё-таки, вновь вынужден всех побеспокоить... Ну никак не получается составить битовый массив из iplImage! Ну хоть убей - не получается!!! SOS!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
И всё-таки, вновь вынужден всех побеспокоить... Ну никак не получается составить битовый массив из iplImage! Ну хоть убей - не получается!!! SOS!!!

OpenCV, в отличие от Ipl, не поддерживает битовые изображения, как я понял из инструкции, так что придется собирать битовый массив самому. Точки можно доставать при помощи команды:

CvScalar cvGet2D(const CvArr* arr, int idx0, int idx1);

где arr - указатель на изображение, idx0 - x координата, а idx1 - y координата.

пробегать точки изображения, сравнивать с порогом, и собирать байты побитно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
OpenCV, в отличие от Ipl, не поддерживает битовые изображения, как я понял из инструкции, так что придется собирать битовый массив самому. Точки можно доставать при помощи команды:

CvScalar cvGet2D(const CvArr* arr, int idx0, int idx1);

где arr - указатель на изображение, idx0 - x координата, а idx1 - y координата.

пробегать точки изображения, сравнивать с порогом, и собирать байты побитно.

Вроде бы CvGet2D тоже не поддерживает.

Битовые изображения (и даже кодированные по длине) поддерживает библиотека http://camellia.sourceforge.net/

 #include <opencv/cv.h>

 #include <opencv/highgui.h>

 #include <camellia.h>


 int main() {

	 CamImage *i = (CamImage*)cvLoadImage("./1.png", CV_LOAD_IMAGE_GRAYSCALE);

	 CamImage t;

	 camAllocateImage(&t, i->width, i->height, CAM_DEPTH_1U);


	 camThreshold(i, &t, 100);


	 camSavePGM(&t, "./1.bin.pgm");


	 IplImage *b = cvLoadImage("./1.bin.pgm");

	 cvNamedWindow("thr");

	 cvShowImage("thr", ;

	 cvWaitKey(0);

 }[/code]

Хотя, не нашел как преобразовать битовое изображение в серое (кроме идиотского сохранить-загрузить) :)

BTW, а зачем нужна битовая матрица? Чем не подходит байтовая или с числами с плавающей точкой (масштабированная к нулям и единицам)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×