0

我正在使用 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);
}

在返回带有视图的垫子之前的 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 -> 结果是一样的,我不明白为什么 get 命令不返回精确的点击位置,而是在它附近的某个地方。我不知道如何解决这个问题。

4

1 回答 1

0

这是您的问题的解决方案

也就是说,

@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;
于 2014-05-05T14:36:38.163 回答