draft 三

package com.example.administrator.opencv.testt;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Process;
import android.os.StrictMode;
import android.os.SystemClock;
import android.support.annotation.RequiresApi;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.administrator.opencv.R;

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.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;

import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.List;


import static org.opencv.core.CvType.CV_16SC1;
import static org.opencv.imgproc.Imgproc.MORPH_RECT;

public class Tutorial1Activity22 extends Activity implements CvCameraViewListener2 {
    private static final String TAG = "OCVSample::Activity";
    private CameraBridgeViewBase mOpenCvCameraView;
     private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS:
                {
                    Log.i(TAG, "OpenCV loaded successfully");
                    mOpenCvCameraView.enableView();
                } break;
                default:
                {
                    super.onManagerConnected(status);
                } break;
            }
        }
    };


    private TextView tv1;
    private ImageView imageView;
    private double  LimitMax=0.992;
    private boolean linimax=true;
    Handler handler =new Handler(){
        @Override
        public void handleMessage(Message msg) {
            tv1.setText("變化值為:"+value);
            switch (msg.what){
                case 0:
                    imageView.setVisibility(View.GONE);

                    break;
                case  1:
                    imageView.setVisibility(View.VISIBLE);
                    imageView.setImageBitmap(bitmap);
                    break;

            }
        }
    };
    private final static float TARGET_HEAP_UTILIZATION = 0.75f;
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        setContentView(R.layout.tutorial1_surface_view2);
        tv1= (TextView) findViewById(R.id.tv1);
        imageView= (ImageView) findViewById(R.id.img);
        imageView.setVisibility(View.GONE);
        mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view);
/*        else
            mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_native_surface_view);*/
        mOpenCvCameraView.setCameraIndex(CameraBridgeViewBase.CAMERA_ID_BACK);
        mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
        mOpenCvCameraView.setCvCameraViewListener(this);

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

    }
    @Override
    public void onResume()
    {
        if ( OpenCVLoader.initDebug(false)){
            System.out.println("initOk");
            mOpenCvCameraView.enableView();
        }

        super.onResume();

    }
    public void onDestroy() {
        super.onDestroy();
        isRun=false;
        if (mOpenCvCameraView != null)
            mOpenCvCameraView.disableView();
    }



    /*
        public void onClickb(View view){
            mAbsoluteFaceSize=0;
            if (mRelativeFaceSize>0.9){
                mRelativeFaceSize=0.1f;
            }
            mRelativeFaceSize+=0.1f;
            log(mRelativeFaceSize+"");

        }*/
    double  value=0;
    double  maxValue,minValue=0;
    long  matChange=0;
    private Mat  savemat;
    private Mat  sd;


    public void onCameraViewStarted(int width, int height) {

        //  cascadeClassifier=cvGender.getCascadeClassifier();
        new Thread(){
            @Override
            public void run() {
                while (isRun){
                    long  start = System.currentTimeMillis();
                    if (mymat==null){
                        continue;
                    }
                      savemat=mymat.clone();
                    if (previousMat==null){
                        previousMat=savemat.clone();
                    }else {
                        sd=  frameSub(mymat,previousMat);
                        if (sd==null){
                            continue;
                        }
                         value = Core.countNonZero(sd);
                        previousMat=savemat.clone();
                        if (value>800){
                                 times=0;
                            handler.sendEmptyMessage(1);
                       }else {
                            if (value<200){
                                times+=1;
                                if (times>30){
                                    times=0;
                                    matmode= savemat.clone();
                                    System.out.println("testjason");
                                }
                            }else {
                                times=0;
                            }
                            if (matmode!=null){
                              int  compareValue=Core.countNonZero(frameSub(matmode,savemat));
                              System.out.println("compareValue"+"compareValue"+compareValue);
                              if (compareValue<800){
                                  handler.sendEmptyMessage(0);
                              }
                          }else {
                              handler.sendEmptyMessage(0);
                          }
                        }
                     //  Utils.matToBitmap(sd,bitmap);

                    }
                    long end= System.currentTimeMillis()-start;
                    System.out.println("檢測時間"+end);
                    System.out.println("檢測值"+value+"最大值"+maxValue);
                    if (end<TIMEHOLD){
                        Runtime.getRuntime().gc();

                        SystemClock.sleep(TIMEHOLD-end);
                    }
                }
            }
        }.start();

    }
    //  private PeopleDetection peopleDetection;
    private Bitmap  bitmap;
    private int  times =0;
    private boolean isFirst=true;
    private int TIMEHOLD=300;

    public void onCameraViewStopped() {
        isRun=false;
    }

    private float                  mRelativeFaceSize   = 0.3f;
    private int                    mAbsoluteFaceSize   = 0;
    private CascadeClassifier cascadeClassifier;
    public Mat onCameraFrame(CvCameraViewFrame inputFrame) {

           Mat  old=inputFrame.gray();
                  mymat=old.clone();
                   mymat2=old.clone();
        return     old;
    }
    private Mat  previousMat;
    private Mat mymat,mymat2;
    private Mat matmode;
     private boolean isRun=true;
    private static final Scalar FACE_RECT_COLOR  = new Scalar(0, 255, 0, 255);
    Mat morphologyKernel;
    public  Mat frameSub(Mat mat,Mat mat2){
      //  Mat  different=new Mat();
        if (mat.width()<10||mat2.width()<10){
            return null;
        }
        int w=mat2.width()/2;
        int h=mat2.height()/2;
        Imgproc.resize(mat,mat,new Size(w,h));
        Imgproc.resize(mat2,mat2,new Size(w,h));
        Core.subtract(mat,mat2,mat2);
        if (morphologyKernel==null){
            morphologyKernel = Imgproc.getStructuringElement(MORPH_RECT, new Size(3, 3), new Point(-1, -1));
        }
        Core.absdiff(mat2,Scalar.all(0),mat2);
        Imgproc.threshold(mat2,mat2,48,255,0);
        Imgproc.medianBlur(mat2, mat2, 3);
        Imgproc.morphologyEx(mat2,mat2,3,morphologyKernel, new Point(-1,-1),2,1,Scalar.all(1.7976931348623158e+308));


        return mat2;
    }
    public  Mat frameSub2(Mat mat,Mat mat2){
        //  Mat  different=new Mat();
        if (mat.width()<10||mat2.width()<10){
            return null;
        }
        int w=mat.width()/2;
        int h=mat.height()/2;
        Imgproc.resize(mat,mat,new Size(w,h));
        Imgproc.resize(mat2,mat2,new Size(w,h));
        Core.subtract(mat,mat2,mat2);
        if (morphologyKernel==null){
            morphologyKernel = Imgproc.getStructuringElement(MORPH_RECT, new Size(3, 3), new Point(-1, -1));
        }
        Core.absdiff(mat2,Scalar.all(0),mat2);
        Imgproc.threshold(mat2,mat2,48,255,0);
        Imgproc.medianBlur(mat2, mat2, 3);
        Imgproc.morphologyEx(mat2,mat2,3,morphologyKernel, new Point(-1,-1),2,1,Scalar.all(1.7976931348623158e+308));
        morphologyKernel.release();
        mat.release();
        return mat2;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值