Quantcast
Channel: OpenCV Q&A Forum - Latest question feed
Viewing all articles
Browse latest Browse all 19555

Compare Camera captured images with computer generated images

$
0
0
I am making an app which compare camera captured image with computer generated images and these images are stored in database. I am using Opencv for image comparison but it only compare computer generated images correctly.When i capture same image with camera and compare that image with computer generated image then it does not match them acuurately.Is there any way where i can compare camera images also; Here is my code public static void main(String[] args) { // Set image path String path = System.getProperty("user.dir"); String filename1 = path+"/images/266.jpg"; String filename2 = path+"/images/20160805_121529.jpg"; int ret; ret = compareFeature(filename1, filename2); if (ret > 0) { System.out.println("Two images are same."); } else { System.out.println("Two images are different."); } } /** * Compare that two images is similar using feature mapping * @param filename1 - the first image * @param filename2 - the second image * @return integer - count that has the similarity within images */ public static int compareFeature(String filename1, String filename2) { int retVal = 0; long startTime = System.currentTimeMillis(); System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // Load images to compare Mat img1 = Imgcodecs.imread(filename1, Imgcodecs.CV_LOAD_IMAGE_COLOR); Mat img2 = Imgcodecs.imread(filename2, Imgcodecs.CV_LOAD_IMAGE_COLOR); // Declare key point of images MatOfKeyPoint keypoints1 = new MatOfKeyPoint(); MatOfKeyPoint keypoints2 = new MatOfKeyPoint(); Mat descriptors1 = new Mat(); Mat descriptors2 = new Mat(); // Definition of ORB key point detector and descriptor extractors FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB); DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.ORB); // Detect key points detector.detect(img1, keypoints1); detector.detect(img2, keypoints2); // Extract descriptors extractor.compute(img1, keypoints1, descriptors1); extractor.compute(img2, keypoints2, descriptors2); // Definition of descriptor matcher DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING); // Match points of two images MatOfDMatch matches = new MatOfDMatch(); // System.out.println("Type of Image1= " + descriptors1.type() + ", Type of Image2= " + descriptors2.type()); // System.out.println("Cols of Image1= " + descriptors1.cols() + ", Cols of Image2= " + descriptors2.cols()); // Avoid to assertion failed // Assertion failed (type == src2.type()&& src1.cols == src2.cols && (type == CV_32F || type == CV_8U) if (descriptors2.cols() == descriptors1.cols()) { matcher.match(descriptors1, descriptors2 ,matches); // Check matches of key points DMatch[] match = matches.toArray(); double max_dist = 0; double min_dist = 100; for (int i = 0; i < descriptors1.rows(); i++) { double dist = match[i].distance; if( dist < min_dist ) min_dist = dist; if( dist > max_dist ) max_dist = dist; } System.out.println("max_dist=" + max_dist + ", min_dist=" + min_dist); // Extract good images (distances are under 10) for (int i = 0; i < descriptors1.rows(); i++) { if (match[i].distance <= 10) { retVal++; } } System.out.println("matching count=" + retVal); } l ong estimatedTime = System.currentTimeMillis() - startTime; > System.out.println("estimatedTime=" + estimatedTime + "ms"); return retVal; } Thanks in Advance

Viewing all articles
Browse latest Browse all 19555

Trending Articles