brutalis
Пользователи-
Количество публикаций
45 -
Зарегистрирован
-
Посещение
-
Days Won
1
Все публикации пользователя brutalis
-
ТЗ Исходные данные для разработки Вездеходный робот-разведчик должен выполнять ряд задач без участия оператора. Требуется разработать систему визуальной навигации такого робота и реализовать полученные решения на действующем макете. 1. Обзор работ по решаемой проблеме и постановка задачи по разработке и реализации аппаратно-программного обеспечения системы визуальной навигации вездеходного робота-разведчика Основные разделы по специальности (в соответствии с требованиями Государственных образовательных стандартов) 2. Исследовательский раздел (материал по исследованию предметной области, предмета проектирования, анализ вариантов решения задач, выбор конкретного варианта): 2.1. Обзор существующих систем визуальной навигации роботов 2.2. Принципы построения систем визуальной навигации роботов 2.3. Выбор и анализ аппаратных компонентов, программных решений и инструментария для разработки и реализации системы визуальной навигации вездеходного робота-разведчика 3. Специальный раздел (раскрываются все аспекты проектируемой области): 3.1 Разработка архитектуры системы визуальной навигации вездеходного робота-разведчика 3.2. Разработка механизмов доступа к видеокамере и предобработки видеоинформации 3.3. Разработка и реализация подсистемы навигации вездеходного робота-разведчика на базе алгоритма отслеживания множества точек 3.4. Разработка и реализация подсистемы навигации вездеходного робота-разведчика по маякам По поводу железа. вся обработка ведется на пк. на роботе установлена ip камера(пока это D-Link DCS-932L ). Реализуем на QT(mingw) с opencv. под винду. Жестких ограничений по маркерам нет. единственное не должно быть привязки по цвету, тк камера в основном показывает в чб. ps да это диплом pss после успешной защиты постараюсь всю расписать и выложить на форуме
-
Сьрелочки расклеиваютсч на пути следования машинки. При обнаружении стрелочки она должна выполнить действие согласно указателю. Повернуть на заданный угол, ехать прямо или назад или развернуться
-
там есть доковский документ"стрелочки" в нем образцы стрелочек. камера установлена на машинке и при обнаружении стрелки он должна повернуть в ту или иную сторону или развернуться
-
доброго времени суток. возник такой вопрос. есть ип-камера, я получаю с нее картинку. мне нужно, скажем, каждый 5 кадр с нее сверять с известной картиной(png или jpg). и если есть совпадение сообщить об этом как нибудь.(сигнал или функция) подскажите пожалуйста как это реализовать. и где можно посмотреть описание с примерами. зы. как вывести изображение на форму а не в отдельном окне pps использую opencv и qt5 образцы картинок и исходники в архиве camera.rar
-
еще раз приветствую. столкнулся с такой проблемой. есть код //************************Слежение за точками********http://recog.ru/library/opencv/opencvtrackingpoint.pdf //обработка событий с мыши IplImage *image = 0, *grey = 0, *prev_grey = 0, *pyramid = 0, *prev_pyramid = 0, *swap_temp; int win_size = 10; const int MAX_COUNT = 500; CvPoint2D32f* points[2] = {0,0}, *swap_points; char* status = 0; int count = 0; int need_to_init = 0; int night_mode = 0; int flags = 0; int add_remove_pt = 0; CvPoint pt; void on_mouse( int event, int x, int y, int flags, void* param ) { if( !image ) return; if( image->origin ) y = image->height - y; //************************* if( event == CV_EVENT_LBUTTONDOWN ) { //Если нажали левую кнопку мыши, то добавляем отслеживаемую точку pt = cvPoint(x,y); add_remove_pt = 1; printf("%d x %d\n " , x, y);//выводит координаты после закрытия программы }} //**************************** void MainWindow::on_point_detect_clicked() { int c,i, k; CvCapture* capture = cvCaptureFromCAM( 0); //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ if(capture == NULL)// Если камер не обнаружено proverka();assert( capture ); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 320);//1280); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT,240);//960); cvNamedWindow("capture", CV_WINDOW_AUTOSIZE); //Устанавливаем функцию обработчик мыши, сама функция находится выше cvSetMouseCallback( "capture", on_mouse, 0 ); while(true){// получаем кадр frame = cvQueryFrame( capture ); if( !image ) {/*Если изображение image не создано, то надо распределить все буферы. *Изображение не создано первоначально, *поэтому это всего навсего инициализация.*/ image = cvCreateImage( cvGetSize(frame), 8, 3 ); image->origin = frame->origin; grey = cvCreateImage( cvGetSize(frame), 8, 1 ); prev_grey = cvCreateImage( cvGetSize(frame), 8, 1 ); pyramid = cvCreateImage( cvGetSize(frame), 8, 1 ); prev_pyramid = cvCreateImage( cvGetSize(frame), 8, 1 ); //Выделяем массивы под точки, судя по MAX_COUNT максимально у нас //может быть 500 точек points[0] = (CvPoint2D32f*)cvAlloc(MAX_COUNT*sizeof(points[0][0])); points[1] = (CvPoint2D32f*)cvAlloc(MAX_COUNT*sizeof(points[0][0])); status = (char*)cvAlloc(MAX_COUNT); flags = 0;} //копирование и перевод в чёрно-белое изображение cvCopy( frame, image, 0 ); cvCvtColor( image, grey, CV_BGR2GRAY ); //Это для эффекта, когда вы нажимаете n изображение становится тёмным и //вы видите только перемещающиеся //назначенные вами точки if( night_mode ) cvZero( image ); if( need_to_init ) { //Это нужно для автоматической инициализации наблюдения - если вам лень //тыкать мышкой, то можно //запустить автоматическое сканирование изображения на факт выделения //подходящих точек IplImage* eig = cvCreateImage( cvGetSize(grey), 32, 1 ); IplImage* temp = cvCreateImage( cvGetSize(grey), 32, 1 ); double quality = 0.01; double min_distance = 10; count = MAX_COUNT; //определяет наиболее "сильные" углы изображения cvGoodFeaturesToTrack( grey, eig, temp, points[1], &count, quality, min_distance, 0, 3, 0, 0.04 ); //уточняет местоположение углов cvFindCornerSubPix( grey, points[1], count, cvSize(win_size,win_size), cvSize(-1,-1), cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03)); //удаляет ненужные изображения cvReleaseImage( &eig ); cvReleaseImage( &temp ); add_remove_pt = 0;} else if( count > 0 ){ //Если есть хотя бы одна точка на экране, то за ней надо следить //Вычисляем оптический поток на факт поиска особенностей //points[0] - предыдущие точки points[1] - текущие точки cvCalcOpticalFlowPyrLK( prev_grey, grey, prev_pyramid, pyramid, points[0], points[1], count, cvSize(win_size,win_size), 3, status, 0, cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03), flags ); flags |= CV_LKFLOW_PYR_A_READY; //перебираем все точки for( i = k = 0; i < count; i++ ){ //Если вы добавили новую точку нажатием мыши и она слишком близка к //предыдущей - просто удаляем её if( add_remove_pt ) {double dx = pt.x - points[1][i].x; double dy = pt.y - points[1][i].y; if( dx*dx + dy*dy <= 25 ) {add_remove_pt = 0; continue;}} if( !status[i] ) continue; points[1][k++] = points[1][i]; //Отображаем точку на экране cvCircle( image, cvPointFrom32f(points[1][i]), 3, CV_RGB(0,255,0), -1, 8,0);}count = k;} if( add_remove_pt && count < MAX_COUNT ) { //Если точка прошла процедуру проверки (см. выше), то добавляем её в буфер points[1][count++] = cvPointTo32f(pt); //уточняет местоположение углов для всех точек cvFindCornerSubPix( grey, points[1] + count - 1, 1, cvSize(win_size,win_size), cvSize(-1,-1), cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03)); add_remove_pt = 0;} CV_SWAP( prev_grey, grey, swap_temp ); CV_SWAP( prev_pyramid, pyramid, swap_temp ); //Меняем местами точки - новые становятся старыми на следующем шаге цикла CV_SWAP( points[0], points[1], swap_points ); need_to_init = 0;printf("%d\n " ,points[0]); // показываем cvShowImage("capture", image); // тянем frame на qlabel IplImage *img = cvCloneImage(image); QImage qimg; qimg = IplImage2QImage(img); // cvShowImage("Video", frame); ui->lbloriginal->setPixmap(QPixmap::fromImage(qimg)); cvReleaseImage(&img); image = cvQueryFrame(capture); char c = cvWaitKey(33); if (c == 27) {break;}} // нажата ESC switch( (char) c ) {case 'r':need_to_init = 1;break; case 'c':count = 0;break; case 'n':night_mode ^= 1;break; default:;} cvReleaseCapture( &capture ); cvDestroyWindow("capture");} int dig_key=0; int region_coordinates[10][4]; void myMouseCallback( int event, int x, int y, int flags, void* param) { IplImage* img = (IplImage*) param; switch( event ){ case CV_EVENT_MOUSEMOVE: printf("%d x %d\n " , x, y);//************************************* break; case CV_EVENT_LBUTTONDOWN: if (region_coordinates[dig_key][0] != 0 && region_coordinates[dig_key][1] != 0 && region_coordinates[dig_key][2] == 0 && region_coordinates[dig_key][3] == 0) { region_coordinates[dig_key][2]=x; region_coordinates[dig_key][3]=y; } if (region_coordinates[dig_key][0] == 0 && region_coordinates[dig_key][1] == 0) { region_coordinates[dig_key][0]=x; region_coordinates[dig_key][1]=y; } printf("%d x %dn", region_coordinates[dig_key][0], region_coordinates[dig_key][1]);printf("%d x %d\n " , x, y); break;//*************************************************************** case CV_EVENT_RBUTTONDOWN: break; case CV_EVENT_LBUTTONUP: break; } } помогите получить координаты точек.(чтобы воводились координаты в текущий момент в ремени)
-
тепрь у меня возникла следующая проблема. если я тут //обработанное видео cvShowImage("postcapture", dst); IplImage *img1 = cvCloneImage(dst); QImage qimg1; qimg1 = IplImage2QImage(dst); ui->lblprocessed->setPixmap(QPixmap::fromImage(qimg1)); cvReleaseImage(&img1); dst = cvQueryFrame(capture); убираю cvShowImage("postcapture", dst); то при запуске прога крашится. компилируется без ошибок. если я эту строку оставляю то все работает, только не нужное мне окно отрисовывается подскажите что с ней не так
-
а можете расписать(примерчик или код), а то что то я совсем не соображаю спасибо
-
Спасибо за разъяснение. самостоятельно решить проблему вывода обработанного избражения не получается. подскажите что и где нужно исправить чтобы заработало. спасибо.
-
Дык у меня вроде за клиент трова она строка гдч я в grey реревожу или я не прав? Извинчюсь за ошибки и знаки поипинагия
-
Всем доброго времени суток. по поводу моего предыдудщего поста о выводе iplimage в qlabel подошло следующее решение #include <cv.h> #include <highgui.h> using namespace std; using namespace cv; IplImage* imgTracking=0; QImage MainWindow::IplImage2QImage(const IplImage *iplImage) { int height = iplImage->height; int width = iplImage->width; const uchar *qImageBuffer =(const uchar*)iplImage->imageData; QImage img(qImageBuffer, width, height, QImage::Format_RGB888); return img.rgbSwapped(); } void MainWindow::on_pushButton_clicked() { CvCapture *cap; cap = cvCaptureFromCAM(1); IplImage *frame; frame = cvQueryFrame(cap); bool play = true; while(frame && play){ cvWaitKey(10); IplImage *img = cvCloneImage(frame); if (img->origin) { cvFlip(img); img->origin= 0; } QImage qimg; qimg = IplImage2QImage(img); //cvShowImage("Video", frame); ui->labVideo->setPixmap(QPixmap::fromImage(qimg)); cvReleaseImage(&img); frame = cvQueryFrame(cap); } cvReleaseCapture(&cap); } теперь у меня другая проблема. мне нужно вывести 2 картинки. оригинал и обработанную(детектор границ кенни). оригинал на qlabel выводится отлично. а при выводе обработанного изображения на qlabel прога критует/ до этого когда в 2 окна через cvShowImage выодил все работало ок. подскажите в чем может быть проблема. вот код #include "highgui.h" #include "cv.h" #include "ml.h" #include "stdlib.h" #include "stdio.h" #include <ctype.h> using namespace cv; IplImage* frame = 0; IplImage* dst = 0; IplImage* dst2 = 0; IplImage* imgTracking=0; //преобразуем iplimage в qimage QImage IplImage2QImage(const IplImage *iplImage) { int height = iplImage->height; int width = iplImage->width; const uchar *qImageBuffer =(const uchar*)iplImage->imageData; QImage img(qImageBuffer, width, height, QImage::Format_RGB888); return img.rgbSwapped(); } //детектор границ кенни void MainWindow::on_kennydetekt_clicked() { CvCapture* capture = cvCaptureFromCAM( 1 ); //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ if(capture == NULL)// Если камер не обнаружено proverka();assert( capture ); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 320);//1280); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT,240);//960); int counter=0; char filename[512]; while(true){ // получаем кадр frame = cvQueryFrame( capture ); // показываем // создаём одноканальные картинки // gray = cvCreateImage( cvGetSize(frame), IPL_DEPTH_8U, 1 ); dst = cvCreateImage( cvGetSize(frame), IPL_DEPTH_8U, 1 ); // преобразуем в градации серого //cvCvtColor(frame, gray, CV_RGB2GRAY); // получаем границы cvCanny(frame, dst, 20, 60, 3); // тянем frame на qlabel IplImage *img = cvCloneImage(frame); QImage qimg; qimg = IplImage2QImage(img); // cvShowImage("Video", frame); ui->lbloriginal->setPixmap(QPixmap::fromImage(qimg)); cvReleaseImage(&img); frame = cvQueryFrame(capture); //обработанное видео cvShowImage("postcapture", dst); /* IplImage *img1 = cvCloneImage(dst); QImage qimg1; qimg1 = IplImage2QImage(dst); ui->lblprocessed->setPixmap(QPixmap::fromImage(qimg1)); cvReleaseImage(&img1); dst = cvQueryFrame(capture); */ char c = cvWaitKey(33); if (c == 27) {break;} // нажата ESC else if(c == 13) { // Enter сохраняем кадр в файл sprintf(filename, "Image%d.jpg", counter); printf("[i] capture... %s\n", filename); cvSaveImage(filename, frame);cvSaveImage(filename, dst); counter++;}} // освобождаем ресурсы cvReleaseCapture( &capture ); cvDestroyWindow("capture");cvDestroyAllWindows(); } проблемная часть закоментированна
-
Всем доброго времени суток.Снова нужна помощь знающих людей. есть прога через которую получаю картинку с IP камеры. теперь нужно обрабатывать изображение в потоке. помогите написать , или подскажите где посмотреть, фильтр\обработчик видео в потоке. например разбиение на ржб потоки, распознание объектов и прочее. чем больше тем лучше)) видео получаю таким образом int KamIndex,c,x,y; c = lineEdit->text().toInt() ; c = indexBox->text().toInt() ; x=x_coordinate->text().toInt() ; y=y_coordinate->text().toInt() ; KamIndex=c; //#####################------------------просто доступ к камере // задаём высоту и ширину картинки // получаем любую подключённую камеру //CVAPI(CvCapture*) cvCreateCameraCapture( int index ); //CVAPI(int) cvSaveImage( const char* filename, const CvArr* image, const int* params CV_DEFAULT(0) ); //номер камеры в системе(number of cameras in the system) //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ CvCapture* capture = cvCaptureFromCAM( KamIndex ); //cvCreateCameraCapture(CV_CAP_ANY);// //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ if(capture == NULL) // Если камер не обнаружено proverka(); assert( capture ); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, x);//1280); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT,y);//960); // узнаем ширину и высоту кадра // double width = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH); // double height = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT); //printf("[i] %.0f x %.0f\n", width, height ); IplImage* frame=0; cvNamedWindow("capture", CV_WINDOW_AUTOSIZE); printf("[i] press Enter for capture image and Esc for quit!\n\n"); int counter=0; char filename[512]; while(true){ // получаем кадр frame = cvQueryFrame( capture ); // показываем cvShowImage("capture", frame); char c = cvWaitKey(33); if (c == 27) { // нажата ESC break; } else if(c == 13) { // Enter // сохраняем кадр в файл sprintf(filename, "Image%d.jpg", counter); printf("[i] capture... %s\n", filename); cvSaveImage(filename, frame); counter++; } } // освобождаем ресурсы cvReleaseCapture( &capture ); cvDestroyWindow("capture"); Спасибо. ps в гугле не нашел. прочитал тему http://robocraft.ru/page/opencv/ ,попробовал, не получилось для видео, с картинкой(jpg)работае вои попытки включить сюда раличные фильтры и способы обработки изображения не выкладываю т.к. догадываюсь что там у меня полный бред. помогите написать ,исходя из этого кода, или подскажите где посмотреть, фильтр\обработчик видео в потоке. например разбиение на ржб потоки, распознание объектов и прочее. чем больше тем лучше)) использую QT5.1 и opencv
-
помогите написать , или подскажите где посмотреть, фильтр\обработчик видео в потоке. например распознание объектов и жестов рук и прочее. чем больше тем лучше)) самостоятельный поиск желаемых результатов не принес. очень нуждаюсь в помощи знающих людей. исходники выложены выше. заранее большое спасибо
-
пробовал разобраться, не осилил. помогите пожалуйста прикрутить детектор границ кенни отсюда в этот проект чтобы он включался через checkbox. самому не получается(, не знаю как. спасибо. video.rar
-
в том то и дело, что я не понимаю где тут процедуры такие как поиск граеиц кенни, отобразить все в градациях серого и прочие. вижу тоько else if(action->text()=="Grayscale") { imageProcessingFlags.grayscaleOn=action->isChecked(); emit newImageProcessingFlags(imageProcessingFlags); и прочее, а описание алгоритма найти не могу.
-
нет. не смотрел. не находил такого. спасибо. почти то что нужно. просмотрел. запустил. осталось разобраться как оно работает. если поможете разобраться то будет очень хорошо. Спасибо зы нужно еще чтобы знаки или жесты распозновал))
-
забыл уточнить что пишу все это на QT5.1 и opencv
-
оброго времени суток. пользуясь различными источниками собрал прогу. появились следующие вопросы/проблемы: 1. при запуске ругается (см. рис), причем при запуске дебаг версии после сообщения об ошибки выводит картинку а при запуске релиз версии нет. 2. как сделать так чтобы картинка с камеры передовалась на форму а не открывалась в отдельном окне. 3. как осуществить доступ к камере по IP 4. возможно ли заставить прогу брать *.dll из папки а не из корня. 5. как заставить ее записывать видео там две кнопки, одна(start) передает картинку с камеры в окно, вторая должна делать тоже самое + еще записывать видео(видео не пишет) так же нашел такой кусок кода using namespace std; using namespace cv; VideoCapture vid(“http://192.168.1.7:65534/videostream.cgi?user=admin&pwd=123456&resolution=32”); //change this URL according to your camera if (!vid.isOpened()) { cout << “could not capture”; //break; } Mat *frame; // IplImage *frame=0; cvNamedWindow(“IPcamera”, 1); char key = ‘a’; while(true) { vid.grab(); vid.retrieve(frame); imshow(“IPcamera”, frame); key = waitKey(10); } destroyAllWindows(); break; призапуске выдает ошибку вот что в выводе пишет подскажите как со всем этим бороться или наведите на места где можно почитать, желательно на русском. заранее спасибо. использую qt 4.8-migw из пакета QTSDK 1.2.1 и OPENCV скрины ошибок и исходники тут video.rar