gpt4 book ai didi

android - 使用 OpenCV 进行模板匹配

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:07 25 4
gpt4 key购买 nike

我试图在我的 Android 手机相机中抓取一张图像,使用该图像的 ROI 定义模板,然后在抓取连续图像时进行模板匹配以找到模板的新位置。

问题是模板匹配似乎没有运行:maxVal 值始终在 0.99 左右,而 maxLoc 正是模板(下面的 XY)。

我做错了什么?

这是抓帧时的代码:

protected Bitmap processFrame(VideoCapture capture) {  
capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
Imgproc.cvtColor(mRgba, mGray, Imgproc.COLOR_BGRA2GRAY);
Mat corrMap = new Mat();
Imgproc.matchTemplate(mGray, template, corrMap, Imgproc.TM_CCOEFF_NORMED);
MinMaxLocResult locRes = Core.minMaxLoc(corrMap);
double maxVal = locRes.maxVal;
Point maxLoc = locRes.maxLoc;
Scalar c = new Scalar(255, 0, 0, 255);
Core.putText(mRgba, Double.toString(maxVal), new Point(100,100), 3, 1, c, 2);
Core.putText(mRgba, Double.toString(maxLoc.x), new Point(100,130), 3, 1, c, 2);
Core.putText(mRgba, Double.toString(maxLoc.y), new Point(100,160), 3, 1, c, 2);
}

这是生成模板的代码:

X = 100;  
Y = 100;
H = 150;
W = 200;
template = mGray.submat(Y-H/2, Y+H/2, X-W/2, X+W/2);

最佳答案

我可能离这里很远,但我相信 submat 方法返回指向 mGray 的子矩阵的指针。所以你的模板会随着帧的变化而变化,因为 mRgba 总是被复制到 mGray,但 mGray 永远不会重新分配。在这种情况下,解决方案是复制 mGray 子矩阵。在 C++ 中,这类似于:

mGray.submat(Y-H/2, Y+H/2, X-W/2, X+W/2).copyTo(template);

关于android - 使用 OpenCV 进行模板匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11748855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com