Android + OpenCV:OnTouch getX(),getY()不返回正确的值

时间:2013-07-23 23:05:00

标签: android c++ opencv position ontouchevent

我正在使用OpenCV4Android FaceDetection示例。我有一个包含当前斑点面的矩形的全局表:

private Rect[] facesArray;

还有全局浮点数来存储onClick坐标,

private float onClickX;
private float onClickY;

是从onTouchEvent生成的:

@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);
}

在使用视图返回mat之前的onCameraFrame方法中我正在做:

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/108321090/device-2013-07-24-004207.png

这个圆圈在屏幕上始终与我的手指在同一方向/位置,并且在左上角遇到它,在右下角消失(进入屏幕外)。我尝试使用getRawX,geyRawY - >结果是一样的,我没有说明为什么命令不会返回精确的分接位置,而是靠近它。我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分: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;