【Android】Test JavaCV & OpenCV

来源:互联网 发布:卷积神经网络模型算法 编辑:程序博客网 时间:2024/05/16 05:11


                        opencv_contrib.FaceRecognizer faceRec = com.googlecode.javacv.cpp.opencv_contrib.createEigenFaceRecognizer();//                        opencv_contrib.FaceRecognizer eigenRecog =   com.googlecode.javacv.cpp.opencv_contrib.createEigenFaceRecognizer();//                        opencv_contrib.FaceRecognizer fischerRecog = com.googlecode.javacv.cpp.opencv_contrib.createFisherFaceRecognizer();//                        opencv_contrib.FaceRecognizer lbphRecog =    com.googlecode.javacv.cpp.opencv_contrib.createLBPHFaceRecognizer();


                 try{                        //获取原图                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));                        Mat mat_src = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4);                        Utils.bitmapToMat(bitmap, mat_src);                        int nnHeight = bitmap.getHeight()/10;                        int nnWidth  = bitmap.getWidth()/10;                        Mat mat_bits = new Mat(nnHeight, nnWidth, CvType.CV_8UC4);                        Imgproc.resize(mat_src, mat_bits, new Size(nnWidth, nnHeight));                        Bitmap bmp_gray0 = Bitmap.createBitmap(mat_bits.cols(), mat_bits.rows(), Bitmap.Config.ARGB_8888 );                        Utils.matToBitmap(mat_bits, bmp_gray0);                        picture.setImageBitmap(bitmap);                        Mat mGray = new Mat(nnHeight, nnWidth, CvType.CV_8UC1);                        Imgproc.cvtColor(mat_src, mGray, Imgproc.COLOR_BGRA2GRAY, 1);                        //检测并显示                        MatOfRect faces = new MatOfRect();                        if (cascadeClassifier != null) {                            cascadeClassifier.detectMultiScale(mGray, faces, 1.1, 2, 2, new Size(mGray.height()/5, mGray.height()/5), new Size());                        }                        Rect[] facesArray = faces.toArray();//                        Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.src01);//                        Mat rgbMat = new Mat(bitmap1.getWidth(), bitmap1.getHeight(), CvType.CV_8UC4);//                        Mat gryMat = new Mat();//                        Utils.bitmapToMat(bitmap1, rgbMat);//                        Imgproc.cvtColor(rgbMat, gryMat, Imgproc.COLOR_RGB2GRAY);//                        int nHeight = 100;//                        int nWidth  = 100;//                        Mat mat_template = new Mat(nHeight, nWidth, CvType.CV_8UC1);//                        Imgproc.resize(gryMat, mat_template, new Size(nWidth, nHeight));                        //---------------------                        int nHeight = 100;                        int nWidth  = 100;//                        Mat rgbMat1 = new Mat(bitmap1.getWidth(), bitmap1.getHeight(), CvType.CV_8UC4);//                        Utils.bitmapToMat(bitmap1, rgbMat1);//                        Mat gryMat1 = new Mat(rgbMat1.cols(), rgbMat1.rows(), CvType.CV_8UC1);//                        Imgproc.cvtColor(rgbMat1, gryMat1, Imgproc.COLOR_RGB2GRAY);//                        Mat mat_template1 = new Mat(nHeight, nWidth, CvType.CV_8UC1);//                        Imgproc.resize(gryMat1, mat_template1, new Size(nWidth, nHeight));////                        Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.img_02);//                        Mat rgbMat2 = new Mat(bitmap2.getWidth(), bitmap2.getHeight(), CvType.CV_8UC4);//                        Utils.bitmapToMat(bitmap2, rgbMat2);//                        Mat gryMat2 = new Mat(rgbMat2.cols(), rgbMat2.rows(), CvType.CV_8UC1);//                        Imgproc.cvtColor(rgbMat2, gryMat2, Imgproc.COLOR_RGB2GRAY);//                        Mat mat_template2 = new Mat(nHeight, nWidth, CvType.CV_8UC1);//                        Imgproc.resize(gryMat2, mat_template2, new Size(nWidth, nHeight));//                        Bitmap bitmap3 = BitmapFactory.decodeResource(getResources(), R.drawable.img_11);//                        Mat rgbMat3 = new Mat(bitmap3.getWidth(), bitmap3.getHeight(), CvType.CV_8UC4);//                        Utils.bitmapToMat(bitmap3, rgbMat3);//                        Mat gryMat3 = new Mat();//                        Imgproc.cvtColor(rgbMat3, gryMat3, Imgproc.COLOR_RGB2GRAY);//                        Mat mat_template3 = new Mat(nHeight, nWidth, CvType.CV_8UC1);//                        Imgproc.resize(gryMat3, mat_template3, new Size(nWidth, nHeight));////                        Bitmap bitmap4 = BitmapFactory.decodeResource(getResources(), R.drawable.img_12);//                        Mat rgbMat4 = new Mat(bitmap4.getWidth(), bitmap4.getHeight(), CvType.CV_8UC4);//                        Utils.bitmapToMat(bitmap4, rgbMat4);//                        Mat gryMat4 = new Mat();//                        Imgproc.cvtColor(rgbMat4, gryMat4, Imgproc.COLOR_RGB2GRAY);//                        Mat mat_template4 = new Mat(nHeight, nWidth, CvType.CV_8UC1);//                        Imgproc.resize(gryMat2, mat_template4, new Size(nWidth, nHeight));                        //-------------                        opencv_contrib.FaceRecognizer faceRec = new opencv_contrib.FaceRecognizer();                        opencv_core.MatVector var1 = new opencv_core.MatVector(2);                        Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.img_01);                        opencv_core.IplImage imgTemp1 = bitmapToIplImage(bitmap1);                        Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.img_02);                        opencv_core.IplImage imgTemp2 = bitmapToIplImage(bitmap2);                        int[] var2 = {1,1};                        var1.put(0, imgTemp1);                        var1.put(1, imgTemp2);                        faceRec.train(var1, var2);                        for (int i = 0; i <facesArray.length; i++) {                            Core.rectangle(mat_src, facesArray[i].tl(), facesArray[i].br(), new Scalar(0, 255, 0, 255), 3);                            Point pt = new Point();                            pt.x = facesArray[i].br().x;                            pt.y = facesArray[i].br().y;                            String str_x = Double.toString(pt.x);                            String str_y = Double.toString(pt.y);                            Mat copyMat = mGray.submat(facesArray[i]);                            Mat mat_source   = new Mat(nHeight, nWidth, CvType.CV_8UC1);                            Imgproc.resize(copyMat, mat_source, new Size(nWidth, nHeight));                            //int[] lll = new int[10];                            //double[] ddd = new double[10];                            int[] predicted_label = {-1};                            double[] predicted_confidence = {0.0};                            opencv_core.IplImage sourceImg = bitmapToIplImage(bitmap);                            faceRec.predict(sourceImg, predicted_label, predicted_confidence);                            String str = str_x + ", " + str_y + " Pe:" + predicted_label + " Si:"+predicted_confidence;                            Core.putText(mat_src,str, pt, Core.FONT_HERSHEY_SIMPLEX, 1, new Scalar(255,23,0),2);                            Bitmap bmp_dst = Bitmap.createBitmap(copyMat.cols(), copyMat.rows(), Bitmap.Config.ARGB_8888 );                            Utils.matToBitmap(copyMat, bmp_dst);                            String str2 = getRandomString(8)+".png";                            saveBitmap(bmp_dst, str2);                        }                        //图像显示                        Bitmap bmp_gray = Bitmap.createBitmap(mat_src.cols(), mat_src.rows(), Bitmap.Config.ARGB_8888 );                        Utils.matToBitmap(mat_src, bmp_gray);                        picture2.setImageBitmap(bmp_gray);//                        int nHeight = bitmap.getHeight()/10;//                        int nWidth  = bitmap.getWidth()/10;//                        Mat mat_small = new Mat(nHeight, nWidth, CvType.CV_8UC4);//                        Imgproc.resize(mat_src, mat_small, new Size(nWidth, nHeight));                        //图像处理                        //Mat mat_src = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4);                        //Utils.bitmapToMat(bitmap, mat_src);//                        int nHeight = bitmap.getHeight()/10;//                        int nWidth  = bitmap.getWidth()/10;//                        Mat mat_small = new Mat(nHeight, nWidth, CvType.CV_8UC4);//                        Imgproc.resize(mat_src, mat_small, new Size(nWidth, nHeight));//                        Mat mat_gray = new Mat(mat_small.cols(), mat_small.rows(), CvType.CV_8UC1);//                        Imgproc.cvtColor(mat_small, mat_gray, Imgproc.COLOR_BGRA2GRAY, 1);////                        //-------------------------------------------------------------------//                        Mat frame = new Mat(mat_small.cols(), mat_small.rows(), CvType.CV_8UC4);//                        mat_small.copyTo(frame);////                        Mat frameHSV = new Mat(mat_small.cols(), mat_small.rows(), CvType.CV_8UC3);;   // hsv空间//                        Mat mask = new Mat(mat_small.cols(), mat_small.rows(), CvType.CV_8UC1);//                        Mat dst = new Mat(mat_small.cols(), mat_small.rows(), CvType.CV_8UC3); // 输出图像//                        //dst.copyTo(frame);//                        // 中值滤波,去除椒盐噪声//                        Imgproc.medianBlur(frame, frame, 5);//                        Imgproc.cvtColor(frame, frameHSV, Imgproc.COLOR_RGB2HSV, 3);//                        Mat dstTemp1 = new Mat(mat_small.cols(), mat_small.rows(), CvType.CV_8UC1);//                        Mat dstTemp2 = new Mat(mat_small.cols(), mat_small.rows(), CvType.CV_8UC1);//                        // 对HSV空间进行量化,得到二值图像,亮的部分为手的形状//                        Core.inRange(frameHSV, new Scalar(0, 30, 30), new Scalar(40, 170, 256), dstTemp1);//                        Core.inRange(frameHSV, new Scalar(156, 30, 30), new Scalar(180, 170, 256), dstTemp2);//                        Core.bitwise_or(dstTemp1, dstTemp2, mask);//                        //dstTemp1.copyTo(mask);//                        // 形态学操作,去除噪声,并使手的边界更加清晰//                        Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));//                        Imgproc.erode(mask, mask, element);//                        Imgproc.morphologyEx(mask, mask, Imgproc.MORPH_OPEN, element);//                        Imgproc.dilate(mask, mask, element);//                        Imgproc.morphologyEx(mask, mask, Imgproc.MORPH_CLOSE, element);////                        frame.copyTo(dst, mask);                        //-------------------------------------------------------------------                    }catch (FileNotFoundException e){                        e.printStackTrace();                    }


0 0
原创粉丝点击