使用opencv计算到红点的距离

时间:2015-05-14 12:53:06

标签: c++ opencv

我是opencv的新手。只是设法安装并设置为Visual 2013.我用我的笔记本电脑相机的实时流样本测试它,它的工作原理。现在我想计算网络摄像头与屏幕中间的红色激光点的距离(live_stream)。告诉我从哪里可以开始?我知道我必须从屏幕中间找到R(红色)像素,但我不知道该怎么做以及我可以使用哪些功能。请帮忙吗? 网络摄像头的实时流程如下所示:

   #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 个答案:

答案 0 :(得分:0)

您的红点很可能会在相机流中显示为总白色,所以我建议

  1. 使用cvtColor()转换为灰度。
  2. 使用threshold()的阈值,参数使用thresh = 253,maxval = 255和模式THRESH_BINARY。这应该会给你一个全黑的图像,你的激光是一个小白点。
  3. 然后,您可以使用findContours()在图片中找到您的点。获取轮廓的boundingRect(),然后您可以计算其中心以获得点的精确坐标。
  4. 同样如前所述,不要使用已弃用的C API,而是使用C ++ API。