我是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();
}
答案 0 :(得分:0)
您的红点很可能会在相机流中显示为总白色,所以我建议
cvtColor()
转换为灰度。threshold()
的阈值,参数使用thresh = 253,maxval = 255和模式THRESH_BINARY。这应该会给你一个全黑的图像,你的激光是一个小白点。findContours()
在图片中找到您的点。获取轮廓的boundingRect()
,然后您可以计算其中心以获得点的精确坐标。同样如前所述,不要使用已弃用的C API,而是使用C ++ API。