OpenCV Android Track激光点

时间:2014-11-04 19:53:36

标签: java android opencv image-processing

我试图在Android设备上使用OpenCV跟踪激光点。我想用这个激光点在画布上绘制,画布放在我的摄影视图上。

我已将我的相机预览转换为HSV色彩空间,并使用阈值过滤(仅在H和V通道上)来分离我的激光点。这非常有效。

    public Mat onCameraFrame(CvCameraViewFrame cvf) {
        // Grab the video frame
        cvf.rgba().copyTo(originalFrame);
        cvf.rgba().copyTo(frame);

        // Convert it to HSV
        Imgproc.cvtColor(frame, frame, Imgproc.COLOR_RGB2HSV);

        // Split the frame into individual components (separate images for H, S,
        // and V)
        mChannels.clear();
        Core.split(frame, mChannels); // Split channels: 0-H, 1-S, 2-V
        frameH = mChannels.get(0);
        // frameS = mChannels.get(1);
        frameV = mChannels.get(2);

        // Apply a threshold to each component
        Imgproc.threshold(frameH, frameH, 155, 160, Imgproc.THRESH_BINARY);
        // Imgproc.threshold(frameS, frameS, 0, 100, Imgproc.THRESH_BINARY);
        Imgproc.threshold(frameV, frameV, 250, 256, Imgproc.THRESH_BINARY);

        // Perform an AND operation 
        Core.bitwise_and(frameH, frameV, frame);

        // Display the result.
        frameH.release();
        // frameS.release();
        frameV.release();
        frame.release(); 
        return originalFrame;
    }

现在我试图获取我的laserdot中心的坐标。我尝试在我的框架上使用findContours函数,但这会产生多个点。

我希望有人可以指出我正确的方向,为下一步使用过滤器提供一些提示。

下面是显示已处理帧的屏幕截图。 Processed frame

1 个答案:

答案 0 :(得分:0)

最后使用上面karlphilip提到的边界框技术。