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

Dasha92

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

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

  • Посещение

Сообщения, опубликованные пользователем Dasha92


  1. Друзья, доброго дня!

    Хочу найти дистанцию до объекта и его местонахождение. В первую очередь всё таки дистанцию. У меня есть жестко закрепленные 2 камеры, шахматная доска (7 на 6, и размер квадрата 10см). В течении нескольких дней я пробовала выполнить калибровку стерео следующими действиями - снимала кадры(50 изображений на каждую камеру), потом каждую камеру отдельно калибровала и на имеющихся данных с каждой камеры калибровала стерео(для калибровки стандартные методы OpenCV). Далее используя параметры стереокалибровки пыталась рассчитать дистанцию, однако данные по расчету дистанции каждый раз были неверными. Можете направить на путь истинный? Чувствую, что где-то всё-таки делаю неверно.

    Также интересуют следующее:

    1. Всё-таки в каком порядке лучше всего выполнять калибровку, как далеко шахматка должна находиться и в каких позициях? (я снимала примерно на 1.5 метрах, шахматка в основном была в одной позиции). "RMS" показывает значения больше 2.3

    2. Влияет ли разрешение изображения? У меня на вход подается изображения 1280х1024, дальше и в процессе поиска шахматки и во время калибровки при помощи cv::resize я уменьшаю изображение в 3 раза. Если "RMS" с разрешением 1280x1024 показывает 2.3, то после cv::resize становится 0.14

    Свои файлы прикрепила. Заранее благодарю за ответы.

     

     

    calibrate_one_cam.cpp

    calibrate_stereo.cpp

    depth.cpp


  2. 2 минуты назад, Nuzhny сказал:

    Откуда взялся String?!! Изображение где лежит, в каком виде ты его получаешь, по сети, с диска, rgb, jpeg - где начало цепочки? Изображение - это явно не строка. В этом форуме чаще всего используют библиотеку OpenCV, которая как раз и переводит изображение из какого-то своего формата (например, jpeg на диске) в удобный для обработки порядок байт.

    Работаю с OpenCV. Беру изображение формата .JPG. По поводу String, я думала, что объявляю переменную типа String и туда записываю порядок байт. (видела что-то похожее на Python, там был формат стринг и используя "tobytes" туда записывали


  3. 1 минуту назад, Nuzhny сказал:

    Изображение - это и есть байты. Мне кажется, что вопрос надо конкретизировать.

    Я хочу поместить изображение в общую память, после оттуда вытащить. Получается изображение RGB я превращаю в String в байты, а после обратно конвертирую. Также есть момент высота*ширина*количество каналов. Не могу понять как правильно решить задачу с переводом изобажения


  4. Добрый день. Кто-нибудь сталкивался ли с проблемой по засветке или лучам солнца на камере в солнечный день? по форуму ничего не нашел по запросу (быть может я неверно искала конечно). Хотелось бы если сталкивались, то какие пути решения нашли? Спасибо заранее!


  5. 4 минуты назад, Nuzhny сказал:

    Я бы не заморачивался и сделал всё на ffmpeg (на С разумеется). OpenCV вообще никак не приспособлен для этого.

    Все бы ничего, но моя программа использует OpenCV, без неё никак. Были мысли, может как-то можно реализовать на Си или Си++ какой-то стрим, который потом инклудом будет в главном файле с OpenCV вызываться. Даже не знаю в какую сторону копать или где примеры какие можно найти 


  6. Всем привет! Подскажите пожалуйста, в данный момент при помощи OpenCV я получаю видео с камеры(код на си), как я могу сделать на СИ клиент сервер с целью передать на какой-то другой компьютер получаемый видеопоток. Заранее спасибо за Ваши ответы!


  7. 5 минут назад, Smorodov сказал:

    эмм... насколько еще помню, надо создать маленькое изображение, ну или загрузить. И еще, почему область то нулевого размера ?

    Размер области 0 просто для примера. Можно подробнее про маленькое изображение?


  8. 3 часа назад, Smorodov сказал:

    Так же как с картинками, считываете кадр из одного видео, из другого видео, вставляете как для изображений, записываете в результирующее видео, ну или отображаете кадр на экране, как обычно.

    Попробовала сделать как говорили, после этого у меня при запуске виснет и все. Вот набросанный код:

    CvCapture* bigframe = cvCaptureFromCAM(0);

    Cvcapture* smallframe=cvCreateFileCapture("1.avi");

    CvMat* display;

    CvMat* smallframe;

    cvNamedWindow("video", CV_WINDOW_AUTOSIZE);

     

    if(bigframe) {

    for(;;) {

    display=cvQueryFrame(bigframe);

    }

    cvSetImageROI(display,cRect(0,0,0,0));

    cvCopy(smallframe,display,NULL);

    cvResetImageROI(display);

    cvShowImage("video", display);

    }

     

  9. Хмммм, спасибо большое за ответ! Буду пробовать. Я думала, что он первый кадр только подхватывает, а не весь видеопоток. Я это представляю следующим образом, есть видео(frame) создаем элемент Mat и туда кидаем frame, как  то так CvMat *display =(cvSize(1280, 480), frame). А дальше выделяя область интереса копировать туда видео


  10. Добрый день, работаю на opencv версии 3.3. Мне нужно сделать следующее, есть frame получаемый из камеры (условно 1280х720), нужно на данный frame наложить второй видеоролик, уже меньшего размера (условно, 300х300). Как мне это реализовать, подскажите пожалуйста. Спасибо!! Пишу на Си.

    Наброски кода:

    CvCapture* bigframe = cvCaptureFromCAM(0);

    Cvcapture* smallframe=cvCreateFileCapture("1.avi");

    CvMat* display;

    cvNamedWindow("video", CV_WINDOW_AUTOSIZE);

    while(1) {

    display=cvQueryFrame(bigframe);

    cvShowImage("video", display);

    }


  11. 42 минуты назад, iskees сказал:
    
    cvSetImageROI это выбор области куда будет "наложено" изображение. выберите другу и копируйте в нее. не забудьте потом сделать 
    
    cvResetImageROI  

    Поняла, все получилось как надо! Огромное спасибо за помощь ;)


  12. 1 час назад, iskees сказал:

    не знаю как в С++ но должно быть что-то типа:

    
    cvSetImageROI(mat_big , cvRect(1280-64,480-64,64,64));
    
    cvCopyImage(img, mat_big);
    
    
    cvResetImageROI(mat_big);

    Разобралась, все получилось, спасибо! А как несколько можно добавить? Я так понимаю добавляется ещё один 

    CvCopy(img2,mat_big,NULL);

    Но как ему задать координаты? Чтобы это изображение не накладывалось поверх img1? 


  13. 1 час назад, iskees сказал:

    не знаю как в С++ но должно быть что-то типа:

    
    cvSetImageROI(mat_big , cvRect(1280-64,480-64,64,64));
    
    cvCopyImage(img, mat_big);
    
    
    cvResetImageROI(mat_big);

    Попробовала таким образом, при попытке запуска выводит следующее сообщение:

    init done

    opengl support available 

    Opencv error: assertion failed (rect.width >= 0 && rect.height >= 0 && rect.x <image->... in function cvSetImageROI

     


  14. Добрый день, помогите пожалуйста с решением возникшей проблемы. Задача состоит в следующем, есть видеоизображение получаемое с камеры, показывается в соответствующем окне. Нужно в углу вывести небольшой рисунок (64,64 размеры). Решение задачи вижу следующим образом: создаётся одна большая  матрица, туда копируется видеопоток и изображение. Не могу понять как правильно реализовать, а именно копировать маленькое изображение и видео в матрицу, заранее спасибо за ответы. примерный код:

    CvMat *img; //64x64 картинка

    CvMat *mat_big =(cvSize(1280, 480), CV_8UC3); //создание матрицы

    //здесь копирование изображения и видео должно быть

    cvShowImage(buff, mat_big); //вывод в окно

     

     

×