Compare Camera captured images with computer generated images
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
Thanks to use icon with 101010 to format your code
"When i capture same image with camera and compare that image with computer generated image then it does not match" -- without seing the images - why do you expect, they would match ?
I have downloaded some images and from these images i take picture of on of these downloaded images from camera and then compare with these images.