2015-05-14 6 views
0

Я новичок с opencv. Просто удалось установить и настроить его на Visual 2013. Я протестировал его с образцом живого потока для камеры моего ноутбука, и он работает. Теперь я хочу рассчитать расстояние с веб-камерой до красного лазерного пятна, которое будет находиться в середине экрана (live_stream). Скажите, откуда я могу начать? Я знаю, что я должен найти R (красный) пиксель с середины экрана, но я не знаю, как это сделать и какие функции я могу использовать. Некоторая помощь, пожалуйста? Живой поток с веб-камеры, которая работает как показано ниже:Рассчитать расстояние до красной точки с opencv

#include "opencv2/highgui/highgui.hpp" 
    #include <opencv2/objdetect/objdetect.hpp> 
    #include <opencv2/imgproc/imgproc.hpp> 
    #include <iostream> 
    #include <vector> 
    #include <stdio.h> 

int main() 
{ 

//Data Structure to store cam. 
CvCapture* cap=cvCreateCameraCapture(0); 
//Image variable to store frame 
IplImage* frame; 
//Window to show livefeed 
cvNamedWindow("Imagine Live",CV_WINDOW_AUTOSIZE); 

while(1) 
{ 
//Load the next frame 
frame=cvQueryFrame(cap); 
//If frame is not loaded break from the loop 
if(!frame) 
    printf("\nno");; 
//Show the present frame 
cvShowImage("Imagine Live",frame); 
//Escape Sequence 
char c=cvWaitKey(33); 
//If the key pressed by user is Esc(ASCII is 27) then break out of the loop 
if(c==27) 
    break; 
} 
//CleanUp 
cvReleaseCapture(&cap); 
cvDestroyAllWindows(); 
} 
+1

Пожалуйста, не используйте устаревшие C Api (IplImage, cvShowImage и т. Д.), Так как вы столкнетесь с таким количеством проблем. – GPPK

+0

Тогда что я должен использовать? –

+0

Предпочтительно opencv 3.0, но его в бета-версии использовать 2.4.10 и использовать C++ Api (CV :: mat, CV :: imshow) и т. Д. – GPPK

ответ

0

Ваш красная точка, скорее всего, будет отображаться как общий белый в потоке камеры, так что я хотел бы предложить

  1. Преобразовать в оттенки серого используя cvtColor().
  2. Порог с использованием threshold(), для параметров используйте что-то вроде thresh = 253, maxval = 255 и mode THRESH_BINARY. Это должно дать вам изображение, которое является черным с небольшой белой точкой, где находится ваш лазер.
  3. Затем вы можете использовать findContours(), чтобы найти свою точку на изображении. Получите boundingRect() контура, а затем вы можете рассчитать его центр, чтобы получить точные координаты вашей точки.

Также, как уже упоминалось, не используйте устаревший API C, вместо этого используйте C++ API.

+0

Спасибо! Я попробую то, что ты сказал мне, и я вернусь с большим количеством вопросов. –

Смежные вопросы