Android 安卓&x2B;OpenCV:OnTouch getX(),getY()不';t返回正确的值

Android 安卓&x2B;OpenCV:OnTouch getX(),getY()不';t返回正确的值,android,c++,opencv,position,touch-event,Android,C++,Opencv,Position,Touch Event,我正在使用OpenCV4Android人脸检测示例。我有一个全局表,其中包含当前已定位面的矩形: private Rect[] facesArray; 同时全局浮动以存储onClick坐标 private float onClickX; private float onClickY; 由onTouchEvent生成的: @Override public boolean onTouchEvent(MotionEvent e) { onClickX = e.getX(); on

我正在使用OpenCV4Android人脸检测示例。我有一个全局表,其中包含当前已定位面的矩形:

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()函数。我的问题是,圆圈不是在我的手指下画的,而是总是在右下角。情况就是这样:

无论何时,这个圆圈在屏幕上都和我的手指在同一个方向/位置,在左上角和它相遇,在右下角消失(在屏幕外)。我试着使用getRawX,geyRawY->结果是一样的,我不理解为什么get命令不返回精确的点击位置,而是在它附近的某个地方。我不知道如何解决这个问题。

这是解决您问题的关键

就是

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