0
Android 기기에서 OpenCV를 사용하여 레이저 점을 추적하려고합니다. 이 레이저 점을 사용하여 내 카메라보기에 배치 된 캔버스에 그립니다.OpenCV Android 트랙 레이저 점
나는 카메라 해상도를 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 함수를 사용했지만 여러 점이 나타납니다.
다음에 사용할 필터에 대한 조언을 제공하여 올바른 방향으로 누군가를 안내해주기를 바랍니다.
아래는 처리 된 프레임을 보여주는 스크린 샷입니다.
위의 코드로 처리 된 예제 프레임이 도움이됩니다. 아마도 등고선이 표시된 것 같습니다. – beaker
빨간 레이저 점의 추적을 보여주는 스크린 샷으로 내 질문을 편집했습니다. – Wouter
나는 하나의 등고선 만 보았으므로 찾고있는 것이 맞을 것입니다. 맞습니까? C++에서 컨투어에 '순간'을 사용하면 질량 중심을 찾을 수 있습니다. http://docs.opencv.org/2.4.2/doc/tutorials/imgproc/shapedescriptors/moments/moments.html. – beaker