Я использую образец 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 не возвращают точное положение нажатия, но где-то рядом с ним. Я понятия не имею, как это исправить.
Это решение к вашей проблеме.
который,
@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;
Других решений пока нет …