我正在尝试创建一个程序,该程序将打开相机,取景,并找到激光点。我想分析每一帧并找到一个红色的激光点。理想情况下,我将能够在随每个新帧更新的激光点质心的x和y坐标处插入一条线。我用来拍摄激光图像的相机质量很高,并且能拍摄2048x2048尺寸的图像,因此通过每个像素花费的时间太长。我需要该软件才能快速运行。我已经有了打开相机并获取框架的代码。 laser image
编写代码以在每帧内定位激光点中心点的最佳方法是什么?
谢谢
#include <stdio.h>
#include <iostream>
#include "xiApiPlusOcv.hpp"
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{
try
{
xiAPIplusCameraOcv cam;
// Retrieving a handle to the camera device
printf("Opening first camera...\n");
cam.OpenFirst();
cam.SetExposureTime(10000); //10000 us = 10 ms
// Note: The default parameters of each camera might be different in different API versions
cam.SetImageDataFormat(XI_RGB24);
printf("Starting acquisition...\n");
cam.StartAcquisition();
printf("First pixel value \n");
#define EXPECTED_IMAGES 200
for (int images = 0; images < EXPECTED_IMAGES; images++)
{
Mat cv_mat_image = cam.GetNextImageOcvMat();
cvWaitKey(20);
Mat outImg;
cv::resize(cv_mat_image, outImg, cv::Size(), .35, .35);;
imshow("image", outImg);
}
cam.StopAcquisition();
cam.Close();
printf("Done\n");
cvWaitKey(500);
}
catch (xiAPIplus_Exception& exp) {
printf("Error:\n");
exp.PrintError();
cvWaitKey(2000);
}
return 0;
}