Java OpenCV Android轨迹激光点

Java OpenCV Android轨迹激光点,java,android,opencv,image-processing,Java,Android,Opencv,Image Processing,我正试图在Android设备上使用OpenCV追踪激光点。我想用这个激光枪在我的相机上的画布上画画 我已将camerapreview转换为HSV颜色空间,并在H和V通道上使用阈值过滤器来分离我的激光雷达。这项工作相当可靠 public Mat onCameraFrame(CvCameraViewFrame cvf) { // Grab the video frame cvf.rgba().copyTo(originalFrame); cvf

我正试图在Android设备上使用OpenCV追踪激光点。我想用这个激光枪在我的相机上的画布上画画

我已将camerapreview转换为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;
    }
现在我想得到我的激光枪中心的坐标。我尝试在帧上使用findContours函数,但这会导致多个点

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

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

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

使用上述代码处理后的示例帧会有所帮助。可能是标记了轮廓。我用一个显示红色激光点跟踪的屏幕截图编辑了我的问题。我只看到一个轮廓,所以这应该是你要找的,对吗?在C++中,我用轮廓上的矩来寻找质心,比如::我以前尝试过这个方法,但是得到的中心点太多了。还有其他选择吗?用这个,你就可以走了。