OpenCV是否支持两个图像的比较,返回一些值(可能是百分比),表示这些图像有多相似?例如,如果相同的图像被传递两次将返回100%,如果图像完全不同则将返回0%.
我已经在StackOverflow上阅读了很多类似的主题.我也做了一些谷歌搜索.可悲的是,我无法想出一个令人满意的答案.
我的代码运行良好,但是当它提取关键点时,它与两个图像匹配得很差.在这里你可以找到我的代码,但我不知道如何绘制好的匹配JAVA Android
descriptors = new Mat();
keypoints = new MatOfKeyPoint();
detector = FeatureDetector.create(FeatureDetector.ORB);
detector.detect(img1, keypoints);
descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);
descriptor.compute(img1, keypoints, descriptors);
matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
ColorDetection.cvt_YUVtoRGBtoHSV(mYuv,mGraySubmat);
MatOfKeyPoint mKeyPoints = new MatOfKeyPoint();
MatOfDMatch matches = new MatOfDMatch();
detector.detect(mGraySubmat, mKeyPoints);
descriptor.compute(mGraySubmat, mKeyPoints, mIntermediateMat);
matcher.match(mIntermediateMat,descriptors,matches);
mIntermediateMat2.create(resultSize, CvType.CV_8UC1);
Features2d.drawMatches(img1, keypoints, mGraySubmat, mKeyPoints, matches,
mIntermediateMat2,GREEN, RED, MATCH_MASK, Features2d.NOT_DRAW_SINGLE_POINTS);
Imgproc.resize(mIntermediateMat2, mIntermediateMat2, mRgba.size());
Imgproc.cvtColor(mIntermediateMat2, mRgba, Imgproc.COLOR_RGBA2BGRA, 4);
Utils.matToBitmap(mRgba, bmp);
DMatch dm[] = matches.toArray();
List<Point> lp1 = new ArrayList<Point>(dm.length);
List<Point> lp2 = new ArrayList<Point>(dm.length);
KeyPoint tkp[] = keypoints.toArray(); …Run Code Online (Sandbox Code Playgroud) 我无法使用此功能.基本上我正在进行特征检测并与参考图像匹配.我想在输入图像上叠加匹配的要素.这是我的代码:
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材料的方式却很少.谢谢你的帮助!
我正在开发一个项目,我需要使用opencv检测图像上的功能.
我在用
SURF detector;
SURF extractor;
BFMatcher matcher;
Run Code Online (Sandbox Code Playgroud)
用于检测,提取和匹配点.它适用于某些图像,但在其他图像上失败.
例如,系统在此映像上失败:
显然,此图像具有一些纹理,并且特征检测器应检测它们,但未检测到任何特征,因此不会生成匹配.
如何改进此功能检测?
我可以使用任何图像处理技术吗?
我可以使用哪种其他探测器来帮助解决这个问题?
c++ opencv image-processing feature-extraction feature-detection