Deff 0 Жалоба Опубликовано December 4, 2009 Приветствую вас, единомышленники! Приветствую и прошу помощи. Плохо знаком с OpenCV, но чувствую, что с ней лучше всего решить мою задачу. Суть: есть jpeg-файл (см. ниже уменьшенную версию), нужно: вырезать кусок изображениясделать его чёрно-белымсоставить матрицу изображения этого ч-б куска (из 1 и 0) Как вырезать кусок примерно представляю себе, с ROI, но вот что касается реализации.. Очень туго идёт пока. С остальным пока так же. В связи с этим и прошу у вас помощи! Заранее благодарен Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 4, 2009 Приветствую вас, единомышленники! Приветствую и прошу помощи. Плохо знаком с OpenCV, но чувствую, что с ней лучше всего решить мою задачу. Суть: есть jpeg-файл (см. ниже уменьшенную версию), нужно: вырезать кусок изображениясделать его чёрно-белымсоставить матрицу изображения этого ч-б куска (из 1 и 0) Как вырезать кусок примерно представляю себе, с ROI, но вот что касается реализации.. Очень туго идёт пока. С остальным пока так же. В связи с этим и прошу у вас помощи! Заранее благодарен Вот проект загружающий картинку, бинаризующий её и вырезающий кусок: image_loader_cv2.rar Как читать данные из IplImage было на форуме. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Deff 0 Жалоба Опубликовано December 4, 2009 Огромное спасибо! Буду разбираться!)) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Deff 0 Жалоба Опубликовано December 4, 2009 Возникла проблема.. При запуске exe-шника (из архива) возникает ошибка с требованием файла "CV200.DLL". Не компилируется по той же причине.. Самого этого файлика у меня вообще на дисках не нашлось. Переставил OpenCV_1.1pre1a.exe, то же самое.. С чем это может быть связано? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 4, 2009 Возникла проблема.. При запуске exe-шника (из архива) возникает ошибка с требованием файла "CV200.DLL". Не компилируется по той же причине.. Самого этого файлика у меня вообще на дисках не нашлось. Переставил OpenCV_1.1pre1a.exe, то же самое.. С чем это может быть связано? Проект для OpenCv2.0 dll и lib есть на форуме. Но может быть DLL придется построить самому (иногда не работает на других компах). А можно просто взять (или создать) проект под 1.1.pre1 и вставить туда текст программы. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Deff 0 Жалоба Опубликовано December 7, 2009 И всё-таки, вновь вынужден всех побеспокоить... Ну никак не получается составить битовый массив из iplImage! Ну хоть убей - не получается!!! SOS!!! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 8, 2009 И всё-таки, вновь вынужден всех побеспокоить... Ну никак не получается составить битовый массив из iplImage! Ну хоть убей - не получается!!! SOS!!! OpenCV, в отличие от Ipl, не поддерживает битовые изображения, как я понял из инструкции, так что придется собирать битовый массив самому. Точки можно доставать при помощи команды: CvScalar cvGet2D(const CvArr* arr, int idx0, int idx1); где arr - указатель на изображение, idx0 - x координата, а idx1 - y координата. пробегать точки изображения, сравнивать с порогом, и собирать байты побитно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Cfr 1 Жалоба Опубликовано December 8, 2009 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, а зачем нужна битовая матрица? Чем не подходит байтовая или с числами с плавающей точкой (масштабированная к нулям и единицам)? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах