我试图使用OpenCV库比较两个图像(确定它们是否相似).我配置了java包装器并找到了几个我正在尝试重写为Java的教程(主要是在C/C++中).我正在使用特征检测方法.
问题是我目前拥有的算法没有产生任何合理的结果(它声称两个相似的图像没有任何共同点,并且发现完全不同的其他两个图像之间的匹配).有人建议我应该如何使用openCV匹配器产生一些合理的结果?
这是我的图像比较代码
private static void compareImages(String path1, String path2) {
System.out.println(path1 + "-" + path2);
FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
DescriptorExtractor descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);
DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
// first image
Mat img1 = Imgcodecs.imread(path1, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
Mat descriptors1 = new Mat();
MatOfKeyPoint keypoints1 = new MatOfKeyPoint();
detector.detect(img1, keypoints1);
descriptor.compute(img1, keypoints1, descriptors1);
// second image
Mat img2 = Imgcodecs.imread(path2, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
Mat descriptors2 = new Mat();
MatOfKeyPoint keypoints2 = new MatOfKeyPoint();
detector.detect(img2, keypoints2);
descriptor.compute(img2, keypoints2, descriptors2);
// match these two keypoints sets …Run Code Online (Sandbox Code Playgroud) 我想检查两个与opencv相似或不同的图像.
如果它们是相同的printf("相同");
如果它们不相同printf("不相同");
opencv中是否有任何方法或方法?
我无法使用此功能.基本上我正在进行特征检测并与参考图像匹配.我想在输入图像上叠加匹配的要素.这是我的代码:
public Mat startProcessing(Mat inputImage) {
Imgproc.cvtColor(inputImage, rgb, Imgproc.COLOR_GRAY2RGB);
myFeatures.detect(rgb, keypoints);
descriptorExtractor.compute(inputImage, keypoints, imageDescriptors);
descriptorMatcher.match(templateDescriptors, imageDescriptors, matches);
Features2d.drawMatches(rgb, keypoints, templateImage, templateKeypoints, matches, rgb);
Imgproc.cvtColor(rgb, outputImage, Imgproc.COLOR_RGB2RGBA);
return outputImage;
}
Run Code Online (Sandbox Code Playgroud)
这是Features2d.drawMatches,这是特别的问题.根据我得到的Android错误,一些维度没有排队.说实话,我甚至不确定如何drawMatches在Android上运行,因为在任何地方都没有文档.
我想要做的是在inputImage上绘制匹配项.我已经Feature2d.drawKeypoints开始工作,但我不确定如何转换MatOfDMatch matches为MatOfKeypoint对象.此外,我甚至不确定MatOfDMatch是如何工作的 - 它是否与描述符对应的内部有一些关联性?
对不起,到处都是,我很难在Android上使用OpenCV.那里的C++文档很好,但Android材料的方式却很少.谢谢你的帮助!