オプティカルフローを使ったandroidアプリを作成しています。
画面全体のオプティカルフローを処理すると処理が重くなり、また誤認識も増えるため画像の一部を処理しようとRectを使っています。

     Rect roi = new Rect(80,20,50,160);

切り取り範囲の頂点を(80,20)としてそこから160×50の部分を切り取ろうと設定してもアプリを起動すると原点(0.0)から160×50の範囲が切り取られています。頂点(80,20)の数値を別の数字に変えても反映されません。ちなみに切り取り範囲はきちんと反映されています。

原因がお分かりの方いらっしゃいましたら教えていただけますか?

    package com.example.saito1.eyeglanceneo;

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.imgproc.Imgproc ;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.video.Video;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceView;
import android.view.WindowManager;


public class CameraActivity extends Activity implements CvCameraViewListener2 {

static {
    if (!OpenCVLoader.initDebug()) {
        Log.d("TAG", "Filed OpenCVLoader.initDebug()");
    }
}
private static final String TAG = "OCVSample::Activity";
private CameraBridgeViewBase mOpenCvCameraView;// カメラビューのインスタンス
private Mat image; //カメラ画像保存用の画像行列


// OpenCVライブラリをロードした結果として呼ばれるコールバック
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            // 読み込みが成功したらカメラプレビューを開始
            case LoaderCallbackInterface.SUCCESS:
                Log.i(TAG, "OpenCV loaded successfully");
                //OpenCVを正しくロードできた場合はstatusとしてLoaderCallbackInterface.SUCCESSが渡されるので,
                //その場合のみカメラプレビューを開始するようにしておきます。


                mOpenCvCameraView.enableView();

                break;
            default:
                super.onManagerConnected(status);
                break;
        }
    }
};



// 起動時
@Override
public void onCreate(Bundle savedInstanceState) {
    Log.i(TAG, "called onCreate");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.eyeglance);



    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


    mOpenCvCameraView = (CameraBridgeViewBase)findViewById
            (R.id.camera_view);    // カメラビューのインスタンス(mOpenCvCameraView)を変数にバインド


    mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
    // リスナーの登録*
    mOpenCvCameraView.setCvCameraViewListener(this);// mOpenCvCameraViewが動いたら
    mOpenCvCameraView.setMaxFrameSize(320,240);
}







// 停止時
@Override
public void onPause() {
    super.onPause();
    if (mOpenCvCameraView != null)
        mOpenCvCameraView.disableView();
}

// 再開時
@Override
public void onResume() {
    super.onResume();
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0,
            this, mLoaderCallback);
    //onResume時にOpenCVLoader#initAsyncを呼び出すことで,OpenCVライブラリをロードします。
    //その際,第3引数にはロード処理終了時に呼び出されるコールバックを指定します。
}

// 破棄時
public void onDestroy() {
    super.onDestroy();
    if (mOpenCvCameraView != null)
        mOpenCvCameraView.disableView();
}



// カメラ開始時
public void onCameraViewStarted(int width, int height) { //カメラプレビュー開始時に呼ばれる
    image = new Mat(height, width, CvType.CV_8UC4);
}


// カメラ停止時
public void onCameraViewStopped() {
    image.release();
}

//時間計測用
double ff =1000000.0/System.nanoTime();



Mat first_frame = null;//1枚目の画像比較
Mat second_frame = null;//2枚目の画像比較

int Yhaba = 5;//水平の点の間隔
int Xhaba = 5;//垂直の点の間隔

 Rect roi = new Rect(80,20,50,160);//切り取り範囲を指定


public Mat onCameraFrame(final CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
    honban[0][0]=0.0;
    honban[0][1]=0.0;
    // コンストラクタ
    Point pt1=new Point(); //二次元の座標を格納.
    Point pt2=new Point();
    Scalar color;

    first_frame = second_frame;
    if(first_frame == null || second_frame == null){ //開始時には0なので同じ画像が表示。


        first_frame =  new Mat(inputFrame.gray(),roi);//inputFrame.gray()でカメラ画像のMatを取得しfirst_frameに格納している
        second_frame =  new Mat(inputFrame.gray(),roi);


        return inputFrame.gray();
    }
    second_frame = new Mat(inputFrame.gray(),roi);//セカンドが入る



    Mat flow = new Mat(second_frame.size(), CvType.CV_32FC2);


    Video.calcOpticalFlowFarneback(first_frame, second_frame,
            flow, 0.5, 3, 15, 3, 5, 1.1, 0);



    image = inputFrame.gray();
    for ( int i=0;i < second_frame.size().height;i+=Yhaba ){//y
        for ( int j=0;j < second_frame.size().width;j+=Xhaba ){//x
            pt1.x = j;//元の点の場所
            pt1.y = i;
            pt2.x = j + flow.get(i,j)[0];//垂直[0]
            pt2.y = i + flow.get(i,j)[1];//垂平[1]
            color = new Scalar(255,255,0,255);


            // フロー描画。imageに線描写をしている。
            Imgproc.line(image,
                    pt1,
                    pt2,
                    color, 2, 8, 0);
 }



    }

    return image;  
  }   }