Java OpenCV Android轨迹激光点
我正试图在Android设备上使用OpenCV追踪激光点。我想用这个激光枪在我的相机上的画布上画画 我已将camerapreview转换为HSV颜色空间,并在H和V通道上使用阈值过滤器来分离我的激光雷达。这项工作相当可靠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
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++中,我用轮廓上的矩来寻找质心,比如::我以前尝试过这个方法,但是得到的中心点太多了。还有其他选择吗?用这个,你就可以走了。