Android + OpenCV: OnTouch getX (), getY () не возвращает правильные значения

Я использую образец OpenCV4Android FaceDetection. У меня есть глобальная таблица с прямоугольниками в настоящее время spoted лица:

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 перед возвращением mat с view я делаю:

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 не возвращают точное положение нажатия, но где-то рядом с ним. Я понятия не имею, как это исправить.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]