繁体   English   中英

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

[英]Android + OpenCV: OnTouch getX(), getY() doesn't return right values

我正在使用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命令不会返回精确的分接头位置,而是返回它附近的某个位置。 我不知道如何解决这个问题。

这是解决您的问题的方法。

就是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM