Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于OpenCV的Android图像比较_Android_Opencv - Fatal编程技术网

基于OpenCV的Android图像比较

基于OpenCV的Android图像比较,android,opencv,Android,Opencv,我设计了一些图像比较代码。匹配的部分仍然有点缺陷,我希望得到一些帮助。该项目可在- 我有这两张图片img1和img2 这些是同一个人的照片。当我想要比较这两个图像时,下面的代码返回false bmpimg1 = Bitmap.createScaledBitmap(bmpimg1, 100, 100, true); bmpimg2 = Bitmap.createScaledBitmap(bmpimg2, 100, 100, true);

我设计了一些图像比较代码。匹配的部分仍然有点缺陷,我希望得到一些帮助。该项目可在-

我有这两张图片img1和img2

这些是同一个人的照片。当我想要比较这两个图像时,下面的代码返回false

bmpimg1 = Bitmap.createScaledBitmap(bmpimg1, 100, 100, true);
                    bmpimg2 = Bitmap.createScaledBitmap(bmpimg2, 100, 100, true);
                    Mat img1 = new Mat();
                    Utils.bitmapToMat(bmpimg1, img1);
                    Mat img2 = new Mat();
                    Utils.bitmapToMat(bmpimg2, img2);
                    Imgproc.cvtColor(img1, img1, Imgproc.COLOR_RGBA2GRAY); 
                    Imgproc.cvtColor(img2, img2, Imgproc.COLOR_RGBA2GRAY); 
                    img1.convertTo(img1, CvType.CV_32F);
                    img2.convertTo(img2, CvType.CV_32F);
                    //Log.d("ImageComparator", "img1:"+img1.rows()+"x"+img1.cols()+" img2:"+img2.rows()+"x"+img2.cols());
                    Mat hist1 = new Mat();
                    Mat hist2 = new Mat();
                    MatOfInt histSize = new MatOfInt(180);
                    MatOfInt channels = new MatOfInt(0);
                    ArrayList<Mat> bgr_planes1= new ArrayList<Mat>();
                    ArrayList<Mat> bgr_planes2= new ArrayList<Mat>();
                    Core.split(img1, bgr_planes1);
                    Core.split(img2, bgr_planes2);
                    MatOfFloat histRanges = new MatOfFloat (0f, 180f);              
                    boolean accumulate = false;
                    Imgproc.calcHist(bgr_planes1, channels, new Mat(), hist1, histSize, histRanges, accumulate);
                    Core.normalize(hist1, hist1, 0, hist1.rows(), Core.NORM_MINMAX, -1, new Mat());
                    Imgproc.calcHist(bgr_planes2, channels, new Mat(), hist2, histSize, histRanges, accumulate);
                    Core.normalize(hist2, hist2, 0, hist2.rows(), Core.NORM_MINMAX, -1, new Mat());
                        img1.convertTo(img1, CvType.CV_32F);
                        img2.convertTo(img2, CvType.CV_32F);
                        hist1.convertTo(hist1, CvType.CV_32F);
                        hist2.convertTo(hist2, CvType.CV_32F);

                        double compare = Imgproc.compareHist(hist1, hist2, Imgproc.CV_COMP_CHISQR);
                        Log.d("ImageComparator", "compare: "+compare);
                        if(compare>0 && compare<1500) {
                            Toast.makeText(MainActivity.this, "Images may be possible duplicates, verifying", Toast.LENGTH_LONG).show();
                            new asyncTask(MainActivity.this).execute();
                        }
                        else if(compare==0)
                            Toast.makeText(MainActivity.this, "Images are exact duplicates", Toast.LENGTH_LONG).show();
                        else
                            Toast.makeText(MainActivity.this, "Images are not duplicates", Toast.LENGTH_LONG).show();

                    startTime = System.currentTimeMillis();
bmpimg1=Bitmap.createScaledBitmap(bmpimg1,100,100,true);
bmpimg2=Bitmap.createScaledBitmap(bmpimg2,100,100,true);
Mat img1=新Mat();
位映射器(bmpimg1,img1);
Mat img2=新Mat();
位映射器(bmpimg2,img2);
Imgproc.cvt颜色(img1,img1,Imgproc.COLOR_RGBA2GRAY);
Imgproc.cvt颜色(img2,img2,Imgproc.COLOR_RGBA2GRAY);
img1.convertTo(img1,CvType.CV_32F);
img2.convertTo(img2,CvType.CV_32F);
//Log.d(“ImageComparator”,“img1:+img1.rows()+”x“+img1.cols()+”img2:+img2.rows()+”x“+img2.cols());
Mat hist1=新Mat();
Mat hist2=新Mat();
MatOfInt histSize=新MatOfInt(180);
MatOfInt通道=新的MatOfInt(0);
ArrayList bgr_planes1=新的ArrayList();
ArrayList bgr_planes2=新的ArrayList();
岩芯分离(img1,bgr_平面1);
岩芯分割(img2,bgr_平面2);
MatOfFloat histRanges=新的MatOfFloat(0f、180f);
布尔累积=假;
Imgproc.calcHist(bgr_平面1、通道、新Mat()、hist1、histSize、histRanges、累积);
normalize(hist1,hist1,0,hist1.rows(),Core.NORM_MINMAX,-1,new Mat());
Imgproc.calcHist(bgr_平面2,通道,新材料(),hist2,histSize,histRanges,累积);
normalize(hist2,hist2,0,hist2.rows(),Core.NORM_MINMAX,-1,new Mat());
img1.convertTo(img1,CvType.CV_32F);
img2.convertTo(img2,CvType.CV_32F);
hist1.convertTo(hist1,CvType.CV_32F);
hist2.convertTo(hist2,CvType.CV_32F);
双重比较=Imgproc.compareHist(hist1、hist2、Imgproc.CV\u COMP\u CHISQR);
Log.d(“图像比较仪”,“比较:”+比较);

如果(compare>0&&compare您似乎只是比较有限,在本例中,这只是图像的直方图。 您使用的算法不适用于面部识别,因为它仅在图像颜色光谱上进行识别


查看如何执行面部识别的可能重复项。

您似乎只是比较有限,在本例中,这只是图像的直方图。 您使用的算法不适用于面部识别,因为它仅在图像颜色光谱上进行识别

有关如何执行面部识别,请参阅可能的重复