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

Sergey1985

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

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

  • Посещение

Репутация

0 Новичек

О Sergey1985

  • Звание
    Бывалый
  1. Поиск мостов

    А где можно почитать про нейросети и про UNet в частности что - нибудь из рубрики ДЛЯ ЧАЙНИКОВ
  2. Поиск мостов

    Я к сожалению очень далек от нейросетей. С трудом вообще представляю что это такое. А то что касается OpenCV то думаю может быть использовать контурный анализ или использовать тот факт что река как правило всегда самая темная полоса получается и на этой темной полосе искать более светлую перпендикулярную полосу.
  3. Поиск мостов

    Доброго времени суток. Возникла задача определения мостов на картах Google и же с ними. (разумеется средствами OpenCV) Хотелось бы послушать мнение компетентных людей на сей счет. Какие идеи и общие принципы решения данной задачи Вы видите?
  4. Преобразование типов в EmguCV

    И еще то что касается третьей версии. В папке opencv\build\x86\vc11\bin лежат всего три dll файла в отличие от предыдущих версий где их было значительно больше. Как это объясняется? И подскажите еще пожалуйста где можно скачать OpenCV2.4.14 и EmguCV той же версии. (на сайте можно скачать только OpenCV2.4.11) Я пользуюсь OpenCV2.4.9 в этой версии нет функции PyrLkRobustMotionEstimator .
  5. Преобразование типов в EmguCV

    Доброго времени суток. Возник вопросик. Пытаюсь разобраться с EmguCV нашел код для работы с web камерой using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; //Подключаем библиотеки using Emgu.CV; using Emgu.CV.UI; using Emgu.Util; using Emgu.CV.CvEnum; using Emgu.CV.Structure; namespace EmguCV { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Capture myCapture = new Capture(); private void GetVideo(object sender, EventArgs e) { //Берем кадр Image<Bgr, Byte> Kadr = myCapture.QueryFrame(); //Вставляем в imageBox imageBox1.Image = Kadr; } private void Form1_Load(object sender, EventArgs e) { //Делаем это безпрерывно Application.Idle += GetVideo; } } } но получаю ошибку D:\Программы на VisualStudio2010\EmguCV\EmguCV\Form1.cs(33,37): ошибка CS0029: Неявное преобразование типа "Emgu.CV.Mat" в "Emgu.CV.Image<Emgu.CV.Structure.Bgr,byte>" невозможно D:\Программы на VisualStudio2010\EmguCV\EmguCV\Form1.cs(35,31): ошибка CS0029: Неявное преобразование типа "Emgu.CV.Image<Emgu.CV.Structure.Bgr,byte>" в "System.Drawing.Image" невозможно Гугл внятного ответа не дал, хотя как я понял ошибка до безумия распространенная. Как ее одолеть?
  6. Размытость

    Я использую OpenCV2.4.9 поэтому PyrLkRobustMotionEstimator у меня нет. Но cv::videostab идея кажется правильная. В исходниках есть пример, но он во первых слишком сложен для меня, во вторых не программа заканчивается с ошибкой сразу после запуска. Есть ли примеры применения классов из cv::videostab более простые в понимании?
  7. Размытость

    Благодарю за ссылку. Задача не тривиальная - это понятно. Ну тогда постараюсь добавить в свой вопрос немного конкретики. Есть видео, кадр из которого я прикрепил (pic). На этом видео данная мира трясется. Необходимо установить максимальное смещение. Были и другие видео. Но как я и говорил phaseCorrelate не самый лучший способ определения смещения. Поэтому я пользовался методом описанным здесь http://robocraft.ru/blog/computervision/3046.html и определял смещение видео по смещению выбранного фрагмента. Но с мирой даже и этот способ оказался не дееспособным. pic.bmp
  8. Размытость

    Доброго времени суток. Вопрос касается размытости изображения и определения сдвига изображения. Для определения сдвига изображения использовал функцию phaseCorrelate но удовлетворительные результаты она приносит лишь тогда, когда изображение является более менее четким. Например снятое на сотовый телефон. Но если видео несколько размыто то эта функция оказывается не работоспособной. А потому возникла необходимость как то его сперва улучшить (увеличить резкость если можно так сказать). Нашел следующую статью и сильно удивился что нет получается никаких стандартных функций для этой цели. На сегодняшний день какие методы решения данной задачи Вы знаете еще или что удалось реализовать? Подскажите (поделитесь) если можно пожалуйста.
  9. Как очистить матрицу Mat

    Есть переменная frame типа Mat Mat frame; Я с ней работаю. И потом ее нужно обнулить так чтобы при вызове if(frame.empty()) данное условие возвращало истину. Как это сделать? С заранее спасибо.
  10. OpenCV + WinForm

    Здравствуйте знатоки компьютерного зрения. У меня к вам несколько вопросов. 1 При запуске OpenCV в WindowsFormAppication появляется вот такая ошибка (см. рисунок) если нажать кнопку ПОВТОР то появляется другое сообщение ShiftVideoWin.exe привело в действие точку остановка и затем указывает на строчку кода _ASSERTE(_CrtIsValidHeapPointer(pUserData)); в модуле dbgheap.c Как с этим совладать? 2 Для работы с OpenCV под WinForm была разработана emgucv. Но она построена для C#. Есть ли возможность использовать ее под С++. И (обшарил весь нет честно) подскажите сайт (если такой вообще имеется в природе) где бы описывалась работа с emgucv наподобе http://robocraft.ru/blog/computervision/264.html 3 В своей программе я использую TrackBar вот код #include "stdafx.h" #include "io.h" #include <Windows.h> #include <conio.h> #include <stdio.h> #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace cv; bool usephase = false; Mat frame, rectfr, curr, prev, curr64f, prev64f, hann; int timedelay=40; int n; VideoCapture video; char names[20][260]; #define LIM_STR 255 static void on_trackbar(int pos, void*) { video.set(CV_CAP_PROP_POS_FRAMES,pos); } int _tmain(int argc, _TCHAR* argv[]) { int key = 0; setlocale(LC_ALL,"Russian"); printf("%s"," Программа обработки видео\n"); // Поиск файлов FILE *pFile; char szBuffer[LIM_STR]; struct _finddata_t findData; intptr_t hFile; HANDLE hndl=GetStdHandle(STD_OUTPUT_HANDLE);//вот эта строка int nr = 1; // количество видео треков int nrmax; // максимальное количество видео треков if((hFile = _findfirst("*.avi", &findData ))==-1L) printf("Файлы видео не найдены\n"); else { printf("Список доступных видео роликов\n"); printf("Выберите нужный из списка\n"); SetConsoleTextAttribute(hndl,FOREGROUND_GREEN|FOREGROUND_INTENSITY); do { if (nr == 1) SetConsoleTextAttribute(hndl,FOREGROUND_BLUE|FOREGROUND_INTENSITY); else SetConsoleTextAttribute(hndl,FOREGROUND_GREEN|FOREGROUND_INTENSITY); printf("%s\n",findData.name); strcpy(names[nr],findData.name); nrmax = nr; nr++; } while ( _findnext ( hFile, &findData ) == 0); }; _findclose (hFile); int k; CONSOLE_SCREEN_BUFFER_INFO bi; GetConsoleScreenBufferInfo(hndl, &bi); COORD cursorPos; cursorPos.X = 0; cursorPos.Y = 3; SetConsoleCursorPosition(hndl, cursorPos); nr = 1; cursorPos.X = 0; cursorPos.Y = 3; bool boolnext = true; while (boolnext) { k = getch(); if (k==13) { boolnext = false; cursorPos.X = 0; cursorPos.Y = 3+nrmax; SetConsoleCursorPosition(hndl, cursorPos); } if (k==72) // стрелка вверх { if (nr>1) { SetConsoleTextAttribute(hndl,FOREGROUND_GREEN|FOREGROUND_INTENSITY); // поменяли цвет printf("%s",names[nr]); // вывели строчку // Перепрыгнули выше cursorPos.X = cursorPos.X; cursorPos.Y = cursorPos.Y-1; SetConsoleCursorPosition(hndl, cursorPos); SetConsoleTextAttribute(hndl,FOREGROUND_BLUE|FOREGROUND_INTENSITY); // поменяли цвет nr--; printf("%s",names[nr]); // вывели строчку SetConsoleCursorPosition(hndl, cursorPos); } } if (k==80) // стрелка вниз { if (nr<nrmax) { SetConsoleTextAttribute(hndl,FOREGROUND_GREEN|FOREGROUND_INTENSITY); // поменяли цвет printf("%s",names[nr]); // вывели строчку // Перепрыгнули ниже cursorPos.X = cursorPos.X; cursorPos.Y = cursorPos.Y+1; SetConsoleCursorPosition(hndl, cursorPos); SetConsoleTextAttribute(hndl,FOREGROUND_BLUE|FOREGROUND_INTENSITY); // поменяли цвет nr++; printf("%s",names[nr]); // вывели строчку SetConsoleCursorPosition(hndl, cursorPos); } } } SetConsoleTextAttribute(hndl,COMMON_LVB_LEADING_BYTE|FOREGROUND_INTENSITY); video.open(names[nr]); int w = video.get(CV_CAP_PROP_FRAME_WIDTH); int h = video.get(CV_CAP_PROP_FRAME_HEIGHT); printf(" Ширина кадра = %i\n",(int)w); printf(" Высота кадра = %i\n",(int)h); Rect r = Rect(35, 30, 545, 430); // Определение прямоугольника для ИОР // Показываем ползунок int currentPosition=0; int frames = (int)video.get(CV_CAP_PROP_FRAME_COUNT); printf(" Количество кадров = %i\n",(int)frames); float com_time = video.get(CV_CAP_PROP_FPS); printf(" CV_CAP_PROP_FPS = %f\n",com_time); cv::namedWindow("phase shift",0); createTrackbar("Position", "phase shift", & currentPosition, frames, on_trackbar); do { video >> frame; // Очередной фрейм if (usephase) { cvtColor(frame, curr, CV_RGB2GRAY); // Перевод в градации серого if(prev.empty()) { prev = curr.clone(); // клонирование изображения createHanningWindow(hann, curr.size(), CV_64F); // Создание окна Ханна } prev.convertTo(prev64f, CV_64F); curr.convertTo(curr64f, CV_64F); //определения сдвигов между двумя изображениями Point2d shift = phaseCorrelate(prev64f, curr64f, hann); // Фазовая корреляция double radius = cv::sqrt(shift.x*shift.x + shift.y*shift.y); // Вычисление радиуса отклонения Point center(curr.cols >> 1, curr.rows >> 1); n = video.get(CV_CAP_PROP_POS_FRAMES); int tpos = (int)video.get(CV_CAP_PROP_POS_MSEC); int sec = tpos/1000; int msec = tpos%1000; printf("n = %i",(int)n); printf(" x = %f",shift.x); printf(" y = %f",shift.y); printf(" время = %i сек %i мсек",sec,msec); printf("%s\n",""); } n = (int)video.get(CV_CAP_PROP_POS_FRAMES); /// ПРОБЛЕМА ЗДЕСЬ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //cv::setTrackbarPos("Position", "phase shift",n); imshow("phase shift", frame); key = waitKey(timedelay); if (key == 32) // нажали пробел { usephase = !usephase; if (usephase) timedelay = 500; else timedelay = 40; } prev = curr.clone(); if (video.get(CV_CAP_PROP_POS_FRAMES) == video.get(CV_CAP_PROP_FRAME_COUNT)) return 0; } while((char)key != 27); // Esc to exit... return 0; } При этом я хочу чтобы ползунок перемещался согласно номеру выдаваемого кадра вот таким образом n = (int)video.get(CV_CAP_PROP_POS_FRAMES); /// ПРОБЛЕМА ЗДЕСЬ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //cv::setTrackbarPos("Position", "phase shift",n); Перемещаться он перемещается но при этом программа начинает жутко тормозить а цифры отображаемые TrackBar'ом мигать. Что я делаю не так. 4 и последний вопрос если я Вас еще не ....... утомил. Как сделать проверку на существование очередного выводимого кадра If (если есть еще кадры) video >> frame; // Очередной фрейм else return 0; ErrorOpenCV.bmp
  11. Виджеты

    Ой прошу простить забыл сказать что я не на Qt а на VC2010 работаю. Но там код похоже должен идентичным получиться. Буду пробовать.
  12. Виджеты

    Проще конечно. Вот только как cv::Mat на форму вывести. я так понял для этого конвертация нужна из cv::Mat в bitbtn. А это очень затратный процесс в точки зрения процессорного времени. Или я что то не понимаю. Если есть ссылочка как cv::Mat в TPictureBox вывести скинте пожалуйста.
  13. Виджеты

    Поясните пожалуйста про создание кнопок в opencv. Я имею в виду функцию cv::createButton для того чтобы ей пользоваться какие то DLL из Qt взять нужно? У меня VC2010. Программа компилится, запускается, но при создании кнопки вылетает.
  14. То есть как это а как же такое понятие как ДИСКРЕТНОСТЬ. Я понимаю так : каждой точке рисунка соответствует определенная координата выраженная парой ЦЕЛЫХ чисел. Количество этих координат зависит от разрешения картинки. Как точка может сдвинуться на часть пикселя?
  15. Доброго времени суток. Есть маленький вопросик по функции phaseCorrelate. Я не могу понять физический смысл возвращаемых значений x и y Point2d shift = phaseCorrelate(...);shift.x shift.y Да я видел что это вектор смещения. Но я не нашел математической трактовки. Этот вектор это какое то отношение каких то величин или что?Зачастую появляются числа от 0 до 1 и от -1 до 0. Как трактовать эти значения? (ну знак числа понятно - это направление смещения. А значение?)Предположим есть видео форматом 640x480. Сравниваем 2 последовательных кадра. Можно ли на основе полученных х и у рассчитать на какое количество пикселей по осям сдвинулось изображение?
×