我正在尝试使用OpenCV在Java中进行模板匹配。我正在使用BufferedImages(没有选择),将它们转换为Mat,然后调用matchTemplate。然而,结果完全是0 - 显然,这不是我想要的。
这是转换为Mat的代码:
private static Mat toMat(BufferedImage im){
int w = im.getWidth(), h = im.getHeight();
BufferedImage bytes =
new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);
bytes.getGraphics().drawImage(im, 0, 0, null);
Mat mat = new Mat(h, w, CvType.CV_8UC3);
mat.put(0, 0,
((DataBufferByte) bytes.getRaster().getDataBuffer()).getData());
return mat;
}
这是调用matchTemplate的地方:
public Pt_Value matchOne(Mat src, Mat tmpl){
Mat fltr = new Mat(src.rows() - tmpl.rows() + 1,
src.cols() - tmpl.cols() + 1, CvType.CV_32FC1);
Imgproc.matchTemplate(src, tmpl, fltr, match_method);
MinMaxLocResult res = Core.minMaxLoc(fltr);
if (match_method == Imgproc.TM_SQDIFF_NORMED)
return new Pt_Value(res.minLoc, 1.0 - res.minVal);
return new Pt_Value(res.maxLoc, res.maxVal);
}