app第三阶段冲刺第五天
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/16315912.html
今天写图像特征怎么通过过滤比对实现图像的匹配
import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.opencv.android.Utils; import org.opencv.calib3d.Calib3d; import org.opencv.core.Core; import org.opencv.core.CvType; import org.opencv.core.DMatch; import org.opencv.core.KeyPoint; import org.opencv.core.Mat; import org.opencv.core.MatOfDMatch; import org.opencv.core.MatOfKeyPoint; import org.opencv.core.MatOfPoint; import org.opencv.core.MatOfPoint2f; import org.opencv.core.Point; import org.opencv.core.Scalar; import org.opencv.features2d.DescriptorExtractor; import org.opencv.features2d.DescriptorMatcher; import org.opencv.features2d.FeatureDetector; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import android.content.Context; import com.nummist.secondsight.filters.Filter; public final class ImageDetectionFilter implements Filter { // The reference image (this detector's target). private final Mat mReferenceImage; // Features of the reference image. private final MatOfKeyPoint mReferenceKeypoints = new MatOfKeyPoint(); // Descriptors of the reference image's features. private final Mat mReferenceDescriptors = new Mat(); // The corner coordinates of the reference image, in pixels. // CvType defines the color depth, number of channels, and // channel layout in the image. Here, each point is represented // by two 32-bit floats. private final Mat mReferenceCorners = new Mat(4, 1, CvType.CV_32FC2); // Features of the scene (the current frame). private final MatOfKeyPoint mSceneKeypoints = new MatOfKeyPoint(); // Descriptors of the scene's features. private final Mat mSceneDescriptors = new Mat(); // Tentative corner coordinates detected in the scene, in // pixels. private final Mat mCandidateSceneCorners = new Mat(4, 1, CvType.CV_32FC2); // Good corner coordinates detected in the scene, in pixels. private final Mat mSceneCorners = new Mat(0, 0, CvType.CV_32FC2); // The good detected corner coordinates, in pixels, as integers. private final MatOfPoint mIntSceneCorners = new MatOfPoint(); // A grayscale version of the scene. private final Mat mGraySrc = new Mat(); // Tentative matches of scene features and reference features. private final MatOfDMatch mMatches = new MatOfDMatch(); // A feature detector, which finds features in images. private final FeatureDetector mFeatureDetector = FeatureDetector.create(FeatureDetector.ORB); // A descriptor extractor, which creates descriptors of // features. private final DescriptorExtractor mDescriptorExtractor = DescriptorExtractor.create(DescriptorExtractor.ORB); // A descriptor matcher, which matches features based on their // descriptors. private final DescriptorMatcher mDescriptorMatcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMINGLUT); // The color of the outline drawn around the detected image. private final Scalar mLineColor = new Scalar(0, 255, 0); public ImageDetectionFilter(final Context context, final int referenceImageResourceID) throws IOException { // Load the reference image from the app's resources. // It is loaded in BGR (blue, green, red) format. mReferenceImage = Utils.loadResource(context, referenceImageResourceID, Imgcodecs.CV_LOAD_IMAGE_COLOR); // Create grayscale and RGBA versions of the reference image. final Mat referenceImageGray = new Mat(); Imgproc.cvtColor(mReferenceImage, referenceImageGray, Imgproc.COLOR_BGR2GRAY); Imgproc.cvtColor(mReferenceImage, mReferenceImage, Imgproc.COLOR_BGR2RGBA); // Store the reference image's corner coordinates, in pixels. mReferenceCorners.put(0, 0, new double[]{0.0, 0.0}); mReferenceCorners.put(1, 0, new double[]{referenceImageGray.cols(), 0.0}); mReferenceCorners.put(2, 0, new double[]{referenceImageGray.cols(), referenceImageGray.rows()}); mReferenceCorners.put(3, 0, new double[]{0.0, referenceImageGray.rows()}); // Detect the reference features and compute their // descriptors. mFeatureDetector.detect(referenceImageGray, mReferenceKeypoints); mDescriptorExtractor.compute(referenceImageGray, mReferenceKeypoints, mReferenceDescriptors); } }
明天继续写图像比对
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)