首页 > 解决方案 > c++ 激光检测使用逐帧分析

问题描述

我正在尝试创建一个程序来打开我的相机,拍摄一个框架,并定位一个激光点。我想分析每一帧并找到一个红色激光点。理想情况下,我将能够在激光点的质心处的 x 和 y 坐标处插入一条线,该线会随着每个新帧的更新而更新。我用来拍摄激光照片的相机质量相当高,拍摄尺寸为 2048x2048 的照片,因此通过每个像素需要太长时间。我需要这个软件运行得相当快。我已经有了打开相机并获取帧的代码。 激光图像

在此处输入图像描述

编写代码以在每帧内定位激光点的中心点的最佳方法是什么?

谢谢,

   #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;

}

标签: c++imageopencv3.0tracking

解决方案


推荐阅读