通过Googleing创建的代码。您会在大图像中找到一幅小图像,但是即使将其与完全不相关的图像进行比较,也可以找到结果。有什么方法可以解决这个问题?
经过几次测试,即使图像不匹配,我也对0-1值感到厌倦。它正在开发一个程序,该程序从计算机屏幕的屏幕快照中查找特定的菜单图像。即使已经搜索并执行了数据,结果也没有不同。除了opencv库,还有Java库,您可以在其中查看大图像在大图像上的结果值吗?
private boolean matchingImage(String existing_image, String check_image) {
System.loadLibrary("opencv_java320");
Mat img = Imgcodecs.imread(existing_image);
Mat templ = Imgcodecs.imread(check_image);
// / Create the result matrix
int result_cols = img.cols() - templ.cols() + 1;
int result_rows = img.rows() - templ.rows() + 1;
Mat result = new Mat(result_rows, result_cols, CvType.CV_32FC1);
for(int i=0; i<2; i++) {
// / Do the Matching and Normalize
Imgproc.matchTemplate(img, templ, result, i);
Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());
// / Localizing the best match with minMaxLoc
MinMaxLocResult mmr = Core.minMaxLoc(result);
Point matchLoc;
if (i == Imgproc.TM_SQDIFF
|| i == Imgproc.TM_SQDIFF_NORMED) {
matchLoc = mmr.minLoc;
} else {
matchLoc = mmr.maxLoc;
}
//matching value
//System.out.println(matchLoc);
/*System.out.println(mmr.minVal);
System.out.println(mmr.maxVal);
System.out.println();*/
// / Show me what you got
Imgproc.rectangle(img, matchLoc, new Point(matchLoc.x + templ.cols(), matchLoc.y + templ.rows()),
new Scalar(0, 0, 0), 2, 8, 0);
}
// Save the visualized detection.
// System.out.println("Writing " + outFile);
return false;
}