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

RinOS

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

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

  • Посещение

  • Days Won

    8

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

  1. Многопоточность и OpenCV

    Это плохо(( К примеру о каких объектах идет речь? К примеру возьмем функцию cvCanny, десяток потоков вызывают эту функцию, со своими данными (одновременно). Будут ли тут какие нибудь траблы? У меня в ПО архитектура такая: Есть программа в ней N потоков, в цикле обращаются к DLL, и вызывают функцию. Вот схема: Если что то не понятно, поясню! Так вот, когда вызыватся process через некоторе время сыпяться ексепшены из cxcore.dll (( Если расставить критические секции перед вызовом process(), то все нормально, но тк эта функция выполняется некотое время, другие потоки ждут, и получается не многопоточность, а последовательно... имхо
  2. Как прикрутить OpenCV к билдеру?

    ух.... я не думал что этот кошмар закончиться... MSVCRT8.0 помог... после перезагрузки)) Спасибо огромное)
  3. Как прикрутить OpenCV к билдеру?

    OpenCV конечно не установлен... Предполагаю таскать с программой 2-3 dll-ки... Но ни как не 20 метров... (( MSVCRT8.0 ставил, не помогло.
  4. Как прикрутить OpenCV к билдеру?

    Сначала требовал bpl-ки и dll-ки. Все нашел и положил в папку с программой. После этого уже не ругался на dll/bpl. а просто выдает 2 раза и вылетает Cfr не разжигай религиозные войны)
  5. Как прикрутить OpenCV к билдеру?

    Ни как не могу запустить программу на другом компьютере где нет среды Builder С++. Что только не делал... Смотрел чего не хватает через Dependency Walker все dll на месте, И копировал все bpl, и компилировал без run time pakage. Ни как не хочет запускаться (( Что делать?
  6. Шаблоны движения (motion templates)

    Поясни! Каким образом?
  7. Шаблоны движения (motion templates)

    Не поможет, тк в этом случае лишь градиент короче, а 2 движущихся объекта с примерно одинаковой скоростью, так и будут казаться одним целым... тут нужно другое решение... только вот какое?
  8. APIDrawIpl на Delphi

    IplImage To Bitmap; Переделал функцию рисования IplImage для Delphi. Пользуйтесь )) function WidthBytes(bits: Integer): Integer; begin Result := Trunc((bits + 31) / 32) * 4; end; function CreateRGBBitmap(Ipl: PIplImage): HBITMAP; var i, j: Integer; LApp: PChar; LBitInfo: TBitmapInfo; begin LBitInfo.bmiHeader.biSize := SizeOf(BITMAPINFOHEADER); LBitInfo.bmiHeader.biWidth := Ipl.width; LBitInfo.bmiHeader.biHeight := Ipl.height; LBitInfo.bmiHeader.biPlanes := 1; LBitInfo.bmiHeader.biBitCount := 24; LBitInfo.bmiHeader.biCompression := BI_RGB; LBitInfo.bmiHeader.biSizeImage := WidthBytes(Ipl.width * 8) * Ipl.height; LBitInfo.bmiHeader.biXPelsPerMeter := 0; LBitInfo.bmiHeader.biYPelsPerMeter := 0; LBitInfo.bmiHeader.biClrUsed := 0; LBitInfo.bmiHeader.biClrImportant := 0; Result := CreateDIBSection(0, LBitInfo, DIB_RGB_COLORS, Pointer(LApp), 0, 0); if(Ipl.nChannels = 1) then for i := 0 to Ipl.height - 1 do for j := 0 to Ipl.width - 1 do begin LApp[Ipl.width*3*(Ipl.height-i-1)+j*3] := Ipl.imageData[Ipl.width*(i)+j]; LApp[Ipl.width*3*(Ipl.height-i-1)+j*3+1] := Ipl.imageData[Ipl.width*(i)+j]; LApp[Ipl.width*3*(Ipl.height-i-1)+j*3+2] := Ipl.imageData[Ipl.width*(i)+j]; end; if Ipl.nChannels = 3 then for i := 0 to Ipl.height - 1 do Move(Pointer(Ipl.imageData+Ipl.width*3*i)^, Pointer(LApp+Ipl.width*3*(Ipl.height-i-1))^, Ipl.width*3); end; procedure APIDrawIpl(X, Y: Integer; Handle: THandle; Ipl: PIplImage); var LMemDC, LHDC: HDC; LBitmap: HBITMAP; begin LHDC := GetDC(Handle); LMemDC := CreateCompatibleDC(LHDC); LBitmap := CreateRGBBitmap(Ipl); SelectObject(LMemDC, LBitmap); BitBlt(LHDC, X, Y, Ipl.width, Ipl.height, LMemDC, 0, 0, SRCCOPY); DeleteObject(LBitmap); DeleteDC(LMemDC); DeleteDC(LHDC); end;
  9. Шаблоны движения (motion templates)

    В общем есть проблемка... Предположим 2 объекта движутся друг за другом, но шаблоны движения распознают их как один движущийся объект, а это не есть гуд (( Для наглядности см анимацию: Как сделать так что бы, различичать что это не 1 объект движется, а 2?
  10. Шаблоны движения (motion templates)

    В книге написано что "распознование" Y, делается с помощью моментов (CvMoments), только к сожалению, я не понял тему про моменты, что это такое и с чем его едят( Если кто то напишет хоть маленький либез по ним буду очень благодарен.
  11. Шаблоны движения (motion templates)

    Как я отписался в другом топике Кальман не подходит) тк для того что бы запустить предсказание нужно знать уже где будет объект в следующем кадре, а это и есть задача...
  12. Фильтр Калмана

    За пример спасибо) С помощью него я понял что не могу использовать фильтр Кальмана в моём случае( Моя цель была найти объект в следующем кадре... Но что бы передать фильтру Кальмана predictionUpdate() надо знать где этот объект находиться...
  13. Шаблоны движения (motion templates)

    Эх)) пример и в правду есть... Я даже его видел раньше, только не понял... там какая то змейка по кругу движется)) За доки спасибо) почитаю) Скорее многомерный)
  14. Шаблоны движения (motion templates)

    Фильтр Калмана должен вычисляется для каждого объекта предыдущем шаге, чтобы спрогнозировать его местоположение в следующем шаге? Правильно я понял? В OpenCV я так думаю нет такой функции?
  15. Шаблоны движения (motion templates)

    Что нам даст запись по x, y? По моему это не вариант... К примеру на рисунке 2 объекта, или более, взяли мы первые 4 кадра и обработали как нам узнать где на следующих 4 кадрах, находится каждый из этих объектов. По просту говоря нужно составить массив CvRect для каждого объекта, это и будет его путь.
  16. Шаблоны движения (motion templates)

    Спасибо)) Классный пример! Возник вопрос... Эта программа после обработки каждых 4 кадров, возвращает нам CvRect, Есть ли какой ни будь достаточно простой способ, узнать всю траеткторию движения объекта? То есть проследить его путь.
  17. Как нарисовать CvBox2D

    хм... что то не понял( видимо этот код подходит для CvRect, но у CvBox2D немного другая структура... Я так понимаю что x,y задают центр прямугольника, а не верхний левый угол. В общем вот функция, может кому тоже пригодится void PaintBox2D(IplImage* img, CvBox2D box, CvScalar color, int thickness CV_DEFAULT(1), int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0)) { CvPoint2D32f box_vtx[4]; cvBoxPoints(box, box_vtx); CvPoint pt0, pt; pt0.x = cvRound(box_vtx[3].x); pt0.y = cvRound(box_vtx[3].y); for(int i = 0; i < 4; i++ ) { pt.x = cvRound(box_vtx.x); pt.y = cvRound(box_vtx.y); cvLine(img, pt0, pt, color, thickness, line_type, shift); pt0 = pt; } }
  18. Как нарисовать CvBox2D

    Да структура) Она представляет собой прямоугольник, повернутый на определенный угол. Вот этот прямоугольник и нужно как то нарисовать..
  19. гистограмма изображения

    Так вроде я и работаю с HSV, входящее изображение RGB сразу и преобразовываю... cvCvtColor(src, hsv, CV_BGR2HSV);
  20. гистограмма изображения

    Всем привет! В общем написал код для сравнения гистограмм изображений: IplImage* hist2image(IplImage *src, int h_bins = 100, int s_bins = 100, int scale = 5) { IplImage *hsv = cvCreateImage(cvSize(src->width, src->height), 8, 3); IplImage *h = cvCreateImage(cvSize(src->width, src->height), 8, 1); IplImage *s = cvCreateImage(cvSize(src->width, src->height), 8, 1); IplImage *v = cvCreateImage(cvSize(src->width, src->height), 8, 1); IplImage* planes[] = {h, s}; int hist_size[] = {h_bins, s_bins}; float h_ranges[] = {0, 180}; float s_ranges[] = {0, 255}; float* ranges[] = {h_ranges, s_ranges}; cvCvtColor(src, hsv, CV_BGR2HSV); cvCvtPixToPlane(hsv, h, s, v, NULL); CvHistogram* hist; hist = cvCreateHist(2, hist_size, CV_HIST_ARRAY, ranges, 1); cvNormalizeHist(hist, 1.0); cvCalcHist(planes, hist, 0, 0); IplImage* hist_img = cvCreateImage(cvSize(h_bins*scale, s_bins*scale),8,3); cvZero( hist_img ); float max_value = 0; cvGetMinMaxHistValue(hist, 0, &max_value, 0, 0); for(int h = 0; h < h_bins; h++) { for(int s = 0; s < s_bins; s++ ) { float bin_val = cvQueryHistValue_2D( hist, h, s ); int intensity = cvRound( bin_val * 255 / (max_value+1) ); cvRectangle( hist_img, cvPoint(h*scale, s*scale), cvPoint((h+1)*scale - 1, (s+1)*scale - 1), CV_RGB(intensity,intensity,intensity), CV_FILLED); } } return hist_img; } CvHistogram* image2hist(IplImage *src) { IplImage *r1 = cvCreateImage(cvSize(src->width, src->height), 8, 1); IplImage *g1 = cvCreateImage(cvSize(src->width, src->height), 8, 1); IplImage *b1 = cvCreateImage(cvSize(src->width, src->height), 8, 1); IplImage* planes[] = {r1, g1, b1}; int hist_size[] = {200, 200}; float r_ranges[] = {0, 255}; float g_ranges[] = {0, 255}; float b_ranges[] = {0, 255}; float* ranges[] = {r_ranges, g_ranges, b_ranges}; CvHistogram* hist; hist = cvCreateHist(2, hist_size, CV_HIST_ARRAY, ranges, 1); cvCalcHist(planes, hist, 0, 0); return hist; } ... cvNamedWindow("MyWnd", CV_WINDOW_AUTOSIZE); cvNamedWindow("MyWnd2", CV_WINDOW_AUTOSIZE); cvNamedWindow("histMyWnd", CV_WINDOW_AUTOSIZE); cvNamedWindow("histMyWnd2", CV_WINDOW_AUTOSIZE); IplImage *src1 = cvLoadImage("1.bmp"); IplImage *src2 = cvLoadImage("2.bmp"); CvHistogram* hist1 = image2hist(src1); CvHistogram* hist2 = image2hist(src2); cvNormalizeHist(hist1, 1.0); cvNormalizeHist(hist2, 1.0); IplImage *imagehist1 = hist2image(src1); IplImage *imagehist2 = hist2image(src2); double dl = cvCompareHist(hist1, hist2, CV_COMP_CORREL); cvShowImage("MyWnd", src1); cvShowImage("MyWnd2", src2); cvShowImage("histMyWnd", imagehist1); cvShowImage("histMyWnd2", imagehist2); cvWaitKey(0); ... Не знаю, правильно ли работает этот код... Прошу прокомментировать. И еще в книжке читал про cvCompareHist, там последний параметр, это методы сравнения: CV_COMP_CORREL, CV_COMP_CHISQR, CV_COMP_INTERSECT, CV_COMP_BHATTACHARYYA Я конечно с помощью переводчика попробывал перевести... но ни чего из этого не понял(( Может у кого есть на русском?
  21. Не понимать ((, переводчик не помог. Скажите пожалуйста по русски.
  22. Что то для меня технология нейросетей вообще темный лес... Даже, Уоссермена-Нейрокомпьютерная техника, читал но это как информационный шум был, ни чего не понял. В особенности, как практически использовать...
  23. Как прикрутить OpenCV к билдеру?

    Здравствуйте! Есть такая структура: typedef struct CvCapture CvCapture; Ну совершенно не укладывающаяся в голове делфийца... как ее описать? Еще не нашел пару нужных функций, к примеру: cvCaptureFromFile. Перехожу по ней и вижу такое описание: ... #define cvCaptureFromFile cvCreateFileCapture #define cvCaptureFromCAM cvCreateCameraCapture #define cvCaptureFromAVI cvCaptureFromFile ... Подскажите плиз откуда их экспортировать?
  24. А на сколько сложно загрузить видео из файла?
×