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

L@MER

Пользователи
  • Количество публикаций

    80
  • Зарегистрирован

  • Посещение

  • Days Won

    3

Все публикации пользователя L@MER

  1. Я так понимаю cvResize мне в помощь?
  2. Получилось! Интересный способ - не на Image а на Panel. Удобно, когда с изображением ничего не надо делать потом. А вот как быть если изображение при этом больше Panel? Как уменьшить масштаб, чтобы картинка вписалась? У Image для этого есть свойство Image2->Proportional = true; а как быть при использовании Panel?
  3. Не совсем ясно как пользоваться и где размещать блоки HBITMAP CreateRGBBitmap(IplImage* _Grab) и APIDrawIpl, а также как при помощи всего этого хозяйства поместить IplImage на КОНКРЕТНЫЙ компонент Image на форме.
  4. Точно! Все заработало! Заработал вот такой код: void __fastcall TForm_MainDemo::Button6Click(TObject *Sender) { Image1->Picture->SaveToFile("etalon.bmp"); Image2->Picture->LoadFromFile("etalon.bmp"); Image2->Proportional = true; // При создании файла определяется область изображения которая будет доступна фильтрам // Загрузка картинки из файла file_name . Функция возвращает указатель // src_image на структуру данных IplImage dst_image = cvLoadImage( argc == 2 ? argv[1] : file_name, 0 ); // Создается картинка в которую будет выводиться гистограмма hist_image = cvCreateImage(cvSize(320,200), 8, 1); // Создается объект гистограммы hist = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1); // Создаются окна в которые будут загружаться картинка и её гистограмма //Первым параметром мы передаём название самого окна, а вторы //его размер, флаг CV_WINDOW_AUTOSIZE, указывает на то, //что окно будет таких же размеров, что и загружаемое изображение. //Можно передать вторым параметром "0" (ноль) и тогда вы сможете //сами изменять размер окна, когда программа запущена. // Высчитывается гистограмма hist для dst_image cvCalcHist( &dst_image, hist, 0, NULL ); //cvZero( dst_image ); // Далее находим максимумы гистограммы cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 ); // Преобразование матриц cvScale( hist->bins, hist->bins, ((double)hist_image->height)/max_value, 0 ); /*cvNormalizeHist( hist, 1000 );*/ // Формирование столбцов гистограммы cvSet( hist_image, cvScalarAll(255), 0 ); bin_w = cvRound((double)hist_image->width/hist_size); for( i = 0; i < hist_size; i++ ) cvRectangle( hist_image, cvPoint(i*bin_w, hist_image->height), cvPoint((i+1)*bin_w, hist_image->height - cvRound(cvGetReal1D(hist->bins,i))), cvScalarAll(0), -1, 8, 0 ); // Отображение гистограммы в заранее созданном окне cvNamedWindow("histogram", 0); cvShowImage( "histogram", hist_image ); // Удаляются изображения из памяти cvReleaseImage(&dst_image); cvReleaseHist(&hist); } //- Тут еще вопрос появился, почему когда я пытаюсь выполнить в данном коде функцию mycvShowImage(Image3,hist_image);(это из библиотеки myCV) у меня выскакивает ошибка Scan line index out of range. а на форме Image3 не появляется hist_image. Хотя до этого я данной функцией на Image1 бросал scr (тип тот-же - IplImage)на форме появлялось нужное изображение. Кстати и до этого я пробовал в программе второй раз воспользоваться mycvShowImage, пытаясь бросать IplImage на разные Image и тоже ничего не получалось! Отчего такое может быть?
  5. Все-таки вначале решил посравнивать гистограммы яркости. Для понимания работы с гистограммами использовал пример demhist.c из библиотеки open.cv. После того как я убрал из данного файла все енужное остался вот такой код: #ifdef _CH_ #pragma package <opencv> #endif #define CV_NO_BACKWARD_COMPATIBILITY #include "cv.h" #include "highgui.h" #include <stdio.h> // Определяем переменные char file_name[] = "etalon.bmp"; int hist_size = 64; float range_0[]={0,256}; float* ranges[] = { range_0 }; IplImage *dst_image = 0, *hist_image = 0; CvHistogram *hist; int i, bin_w; float max_value = 0; //Функция создающая гистограмму яркости и отображающая её и исходное изображение в окнах void gistogramm( int arg ) { // Функция отображает картинку в заранее созданном окне cvShowImage( "image", dst_image ); // Высчитывается гистограмма hist для dst_image cvCalcHist( &dst_image, hist, 0, NULL ); //cvZero( dst_image ); // Далее находим максимумы гистограммы cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 ); // Преобразование матриц cvScale( hist->bins, hist->bins, ((double)hist_image->height)/max_value, 0 ); /*cvNormalizeHist( hist, 1000 );*/ // Формирование столбцов гистограммы cvSet( hist_image, cvScalarAll(255), 0 ); bin_w = cvRound((double)hist_image->width/hist_size); for( i = 0; i < hist_size; i++ ) cvRectangle( hist_image, cvPoint(i*bin_w, hist_image->height), cvPoint((i+1)*bin_w, hist_image->height - cvRound(cvGetReal1D(hist->bins,i))), cvScalarAll(0), -1, 8, 0 ); // Функция отображает гистограмму в заранее созданном окне cvShowImage( "histogram", hist_image ); } int main( int argc, char** argv ) { // Загрузка картинки из файла file_name . Функция возвращает указатель // src_image на структуру данных IplImage dst_image = cvLoadImage( argc == 2 ? argv[1] : file_name, 0 ); // Создается картинка в которую будет выводиться гистограмма hist_image = cvCreateImage(cvSize(320,200), 8, 1); // Создается объект гистограммы hist = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1); cvNamedWindow("image", 0); cvNamedWindow("histogram", 0); //Присваиваем 0 функции update_brightcont gistogramm(0); cvWaitKey(0); // Удаляются изображения из памяти cvReleaseImage(&dst_image); cvReleaseHist(&hist); return 0; } В BCB6 этот код прекрасно компилируется, создается exe и все работает. Создается окно с изображением и окно с его гистограммой. Проблема наступает, когда переношу этот код в свой проект (тоже на ВСВ6) В моем проекте по нажатию кнопки должен создаться файл с эталонным изображением (он прекрасно создается) и окно с гистограммой данного изображения. Но вместо окна с изображением выскакивает ошибка External exeption E06D7363. Что я делаю неправильно? Все переменные и инклуды из demhist.c я в свой проект перенес. Грешу на то что может у меня функция int_main не так работает в BCB6 или я не так функции расположил и применил? Растолкуйте знатоки? Вот код моей программы со вставками из demhist.c: void __fastcall TForm_MainDemo::Button6Click(TObject *Sender) { Image1->Picture->SaveToFile("etalon.bmp"); Image2->Picture->LoadFromFile("etalon.bmp"); Image2->Proportional = true; // Высчитывается гистограмма hist для dst_image cvCalcHist( &dst_image, hist, 0, NULL ); //cvZero( dst_image ); // Далее находим максимумы гистограммы cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 ); // Преобразование матриц cvScale( hist->bins, hist->bins, ((double)hist_image->height)/max_value, 0 ); /*cvNormalizeHist( hist, 1000 );*/ // Формирование столбцов гистограммы cvSet( hist_image, cvScalarAll(255), 0 ); bin_w = cvRound((double)hist_image->width/hist_size); for( i = 0; i < hist_size; i++ ) cvRectangle( hist_image, cvPoint(i*bin_w, hist_image->height), cvPoint((i+1)*bin_w, hist_image->height - cvRound(cvGetReal1D(hist->bins,i))), cvScalarAll(0), -1, 8, 0 ); // Функция отображает гистограмму в заранее созданном окне cvShowImage( "histogram", hist_image ); } //--------------------------------------------------------------------------- int main( int argc, char** argv ) { // Загрузка картинки из файла file_name . Функция возвращает указатель // src_image на структуру данных IplImage dst_image = cvLoadImage( argc == 2 ? argv[1] : file_name, 0 ); // Создается картинка в которую будет выводиться гистограмма hist_image = cvCreateImage(cvSize(320,200), 8, 1); // Создается объект гистограммы hist = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1); cvNamedWindow("image", 0); cvNamedWindow("histogram", 0); cvWaitKey(0); // Удаляются изображения из памяти cvReleaseImage(&dst_image); cvReleaseHist(&hist); return 0; }
  6. ОК! Спасибо за сегодняшнюю консультацию!
  7. ОК! Спасибо за информацию! Завтра с утра засяду творить! Теперь ясна общая концепция! Мне на данном этапе достаточно будет даже просто все отличные контуры изобразить, даже мелкие и шум, главное, чтобы результат сравнения был ясно виден на изображении, а рядом отображалась цифра в процентах, насколько одно изображение, соответствует эталону. Кстати и функции CvAbsDiff есть на выходе какая-нибуть величина дополнительная, которую можно было бы в проценты перевести или надо какую-нибуть дополнительную функцию применять? Если да, то с помощью чего данную процентную величину можно получить?
  8. Уг! Систему понял. Один вопрос остался ламерский, как я понимаю все эти белые пятна и т.д. они виртуальные (т.е. просто внутри программы работают, ну в смысле мне они совершенно в виде картинки в программе не нужны). А вот полученные результаты, т.е. координаты центров выбранных площадей и будут присутствовать на изображении. Я правильно все понял?
  9. Внимательно посмотрел. Все равно не то. Это и в самой библиотеке опенсв есть пример, как контуры выделить, да только это нето что нужно мне не надо искать все контуры всех объектов на одном конкретном изображении, а надо анализировать два изображения относительно друг друга и найдя отличия (ЭТО ключевой момент!) выделить именно ЭТИ отличия, а не просто найти контуры похожих объектов на одном изображении...или все контуры. Это я хоть сейчас могу сделать. А вот именно после какого-то ЭДАКОГО сравнения выделить отличные участки и только их - вот ЭТО меня стопорит по полной на данный момент.
  10. Здесь как я понял о вычитании изображений, это хорошо. А вот как выделить конкретные различия на втором изображении с помощью стандартных функций openCV сия тайна для меня велика есть. Только начал заниматься вплотную данной библиотекой!
  11. Мне-бы пример какой-нибуть, близко-лежащий к решению данных двух вопросов. Причем больше интересует именно второй вопрос - выделение различий на изображении.
  12. Как это можно сделать, используя стандартные функции openCV и чем это будет лучше, чем сравнение их гистограмм? И как решить при этом второйй вопрос - выделения областей на изображениях, отличающихся от эталона?
  13. Как прикрутить OpenCV к билдеру?

    Спасибо за ответы. Это я натуральный блин сегодня ламер, короче я уже до этого поста догадался, что я чего-то недоделываю (давно к теме компзрения не касался) и ТОЧНО, вы совершенно правы - подключил библиотеку myCV и openCV через ADD Library в билдере и все в моем проекте заработало и завертелося! Еще раз спасибо и звиняйте что такой ерундой мозг сносил и себе и вам
  14. Как прикрутить OpenCV к билдеру?

    Переместил проект в корень (также исключил русские буквы и пробелы) - таже ерунда... Да и использовал тот код который написан выше в вашем проекте - все функции, которые относятся к opencv компилятор пропустил а вот две относящиеся к библиотеке myCV снова забраковал - ошибки те-же что и описаны выше. Библиотека эта состоит из двух файлов h и cpp соответственно. В общем засада какая то...
  15. Как прикрутить OpenCV к билдеру?

    Прописано D:\АСПИРАНТУРА\MY PROJECT\UCVISION v1.0\libs в Library Path в меню Progect - Option - Directories. Или где-то еще надо пути прописывать, я прописываю пути к либам и прочему именно в этом меню. Может еще чего не хватает?
  16. Как прикрутить OpenCV к билдеру?

    В рамках выложенного вами проекта все отлично - через Progect - Option - Directories прописал пути к вашим include и lib в проекте и через bcb6 все прекрасно откомпилировалось, создался exe и я увидел картинку с камеры. Но возникла проблема после того как я создал свой собсвенный проект, поместил туда папки с вашими include и lib, а также все dll. Опять-же прописал все пути в Progect - Option - Directories, а также прописал #include "cv.h" #include "highgui.h" в файле MainDemo.h (сам файл проекта MainDemo.bpr соответственно), но, при компиляции выдаются ошибки: [Linker Error] Unresolved external '_cvCreateImage' referenced from D:\АСПИРАНТУРА\MY PROJECT\UCVISION V1.0\MAINDEMO_.OBJ [Linker Error] Unresolved external 'mycvGetImage(Extctrls::TImage *, _IplImage *)' referenced from D:\АСПИРАНТУРА\MY PROJECT\UCVISION V1.0\MAINDEMO_.OBJ [Linker Error] Unresolved external 'mycvShowImage(Extctrls::TImage *, _IplImage *)' referenced from D:\АСПИРАНТУРА\MY PROJECT\UCVISION V1.0\MAINDEMO_.OBJ [Linker Error] Unresolved external '_cvReleaseImage' referenced from D:\АСПИРАНТУРА\MY PROJECT\UCVISION V1.0\MAINDEMO_.OBJ Данные ошибки появляются когда я вставляю в тело программы следующий код (впрочем попытка использовать ЛЮБЫЕ функции openCV приводит к тому-же результату!!!!): void __fastcall TForm_MainDemo::Button2Click(TObject *Sender) { CvSize sz; sz.width=320; sz.height=240; src = cvCreateImage(sz,IPL_DEPTH_8U,3); mycvGetImage(Image1,src); mycvShowImage(Image2,src); cvReleaseImage(&src); } Этот код должен переводить TImage в объект OpenCV типа IplImage и обратно при помощи библиотеки myCV Вот ссылка на библиотеку Вот ссылка на библиотеку http://roboforum.ru/wiki/%D0%91%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_myCV#.D0.9D.D0.B0.D0.B7.D0.BD.D0.B0.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B1.D0.B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA.D0.B8 Вопрос, почему ошибки такие вылезают, вроде все правильно делаю?
  17. DSPACK на BCB6

    Доброго времени суток! Установил компонент DSPACK на BCB6. Но есть проблема - когда бросаю компонент на форму (или пытаюсь использовать готовые примеры для BCB6 из папки компонента), то при компиляции программа обращается к файлам с расширением .hpp. Нахожу их в папке src компонента DSPACK, бросаю в папку с проектом. Файлы это программа находит, но пишет ошибки при их компиляции - в строчках кода include <......hpp>. Меняю <> на "" - компилятор пропускает, но вылезают такие-же ошибки в связанных файлах с расширением .hpp. Если исправляю и там, то в конце концов начинает матюкаться при компиляции на знак нижнего подчеркивания (_) в тексте кода. В общем я так понял, что DSPACK круто заточен под Delphi, а при попытке работать с ним из-под BCB6 все надо переделывать в файлах компонента. Можно-ли как-то все это упростить относительно работы с DSPACK, может у кого уже переделанные файлы для BCB6 заточенные есть? И есть-ли реально работающие примеры захвата видео и возможно его настроек (яркость\контраст и т.п.) на связке DSPACK + BCB6. Если все заработает, то DSPACK будет использован для первичной обработки, затем видео будет обробатываться средствами OpenCV.
  18. DSPACK на BCB6

    Указывал путь (Progect=Options-Directories\Conditions). Не помогает
  19. Работа с камерами

    Спасибо, я так понял это касается как TVideoGrabber, так и DSPack?
  20. Работа с камерами

    Скачал TVideoGrabber с таблеткой - очень серьезная штука - делает все. Как я понял только стандартными средствами opencv делать все настройки драйвера источника - камеры, тв-карты или платы видеозахвата(разрешение, выбор источника с названием источника, яркость, контраст, гамма и все пр.) из под собственной проги нельзя. Требуется дополнительная прослойка. Из таких прослоек нашел два варианта: DSPack и TVideoGrabber. В них все это возможно. Вопрос кто-нибуть состыковывал эти компоненты с opencv (передача видеопотока или изображений из одного в другой)? Это возможно? И если возможно, то нет-ли каких примеров. Заранее благодарен!
  21. Как прикрутить OpenCV к билдеру?

    Спасибо за помощь в целом! Теперь засяду разбираться с этим хитрым зверем!
  22. Как прикрутить OpenCV к билдеру?

    Спасибо за файлы - гляну. Проблему с черным экраном решил. В блоке: fastcall TForm1::TForm1(TComponent *Owner) : TForm(Owner) { capture = cvCaptureFromCAM(1); заменил "0" на "1" и после ссоздания exe все заработало - веб камеру видит - изображение захватывает! Вопрос: где можно найти описание ВСЕХ компонент и их функций библиотеки OPENCV2.1? Интересует описание как на аглицком, так и на русском.Особенно на последнем
  23. Как прикрутить OpenCV к билдеру?

    Помогла установка Microsoft Visual C++ 2008 Redistributable Package (x86) http://www.microsoft.com/downloads/en/deta...;displaylang=en Сообщение об ошибке пропало - программа запустилась. В открывшейся проге в левом верхнем углу - черный экран, видимо там должно появляться изображение - в меню ставлю галку на "камера" - ничего не появляется, жму пункт меню "открыть" - никакого диалога не появляется. Это из-за того, что прога недописана или у меня не работает по какой-то причине? Если второе, то каково решение? P.S. Если несложно выложите файл msvcrt90.dll, если он у вас есть, а то инет перекопал, а ссылок на скачку именно этого файла не нашел. Просто неохота с каждым приложение вкладывать Microsoft Visual C++ 2008 Redistributable Package (x86) , проще один файлик к ехе файлу в папочку положить
  24. Как прикрутить OpenCV к билдеру?

    Скачал MSVCR80.dll. Заменил текущий файл в папке вашего проекта (там был файл 06 года, я скопировал файл 07 года). Та-же ошибка!!! Какие еще пути решения?
×