我正在使用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 - >结果是一样的,我没有说明为什么命令不会返回精确的分接位置,而是靠近它。我不知道如何解决这个问题。
答案 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;