2013-07-23 1 views
0

OpenCV4Android FaceDetection 샘플을 사용하고 있습니다.Android + OpenCV : OnTouch getX(), getY()가 올바른 값을 반환하지 않습니다.

@Override 
public boolean onTouchEvent(MotionEvent e) { 

    onClickX = e.getX(); 
    onClickY = e.getY(); 

    switch (e.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     // something not important for this matter happens here 
    } 

    return super.onTouchEvent(e); 
} 

onCameraFrame 방법에서는 전 : onTouchEvent에서 생성

private float onClickX; 
private float onClickY; 

, 온 클릭 좌표 저장

private Rect[] facesArray; 

글로벌 플로트 : I 현재 spoted 얼굴 사각형으로 글로벌 테이블이 보기와 함께 매트를 되찾고 있어요 :

Core.circle(mRgba,new Point(onClickX,onClickY), 40, new Scalar(0, 255, 0, 255)); 

그래서 어떻게됩니까? onTouchEvent에서 가져온 좌표에 작은 녹색 원을 그려 전역 변수로 보냅니다. 이러한 변수 (onClickX, onClickY)는 onCameraFrame에서 읽고 core.circle() 함수에 사용됩니다. 제 문제는 원은 정확하게 손가락 아래에 그려지지는 않지만 항상 오른쪽 하단에 그려지는 것입니다. 이런 것입니다 : https://dl.dropboxusercontent.com/u/90/device-2013-07-24-004207.png

을 그리고이 원이 화면에 때마다 내 손가락에 같은 방향/위치에 항상이며, 왼쪽 상단 모서리에 부합, 오른쪽 아래 모서리에 사라져은 (외부 화면 이동) . 나는 getRawX, geyRawY를 사용하여 시도했다 -> 결과는 동일하다. 나는 왜 명령어가 정확한 탭 위치가 아니라 어딘가 근처에 있는지 알려주지 않는다. 나는 이것을 고칠 수있는 단서가 없다.

답변

0

귀하의 문제는 solution입니다. 인

,

@Override 
public boolean onTouch(View arg0,MotionEvent event) { 

double cols = mRgba.cols();// mRgba is your image frame 
double rows = mRgba.rows(); 

double xOffset = (mOpenCvCameraView.getWidth() - cols)/2; 
double yOffset = (mOpenCvCameraView.getHeight() - rows)/2; 

onClickX = (float)(event).getX() - xOffset; 
onClickY = (float)(event).getY() - yOffset;