请我尝试在java中创建一个新的应用程序来匹配图片和视频,图片中的模板匹配工作正常,但是当我尝试为视频做的时候我总是有这样的错误信息:
OpenCV错误:断言失败((深度== CV_8U ||深度== CV_32F)&& type == _templ.type()&& _img.dims()< = 2)在cv :: matchTemplate,file中 C:\建立\ master_PackSlaveAddon-Win64的-VC12静电\的OpenCV \模块\ imgproc \ SRC \ templmatch.cpp, 第1062行“main”CvException中的异常 [org.opencv.core.CvException:cv :: Exception: C:\建立\ master_PackSlaveAddon-Win64的-VC12静电\的OpenCV \模块\ imgproc \ SRC \ templmatch.cpp:1062: 错误:(-215)(深度== CV_8U ||深度== CV_32F)&& type == _templ.type()&& _img.dims()< = 2 in function cv :: matchTemplate]
这是我将视频与图片匹配的功能,有人可以帮忙。
public int runVedio(String inFile, String templateFile, int match_method) {
int nbr = 0;
Mat templ = Imgcodecs.imread(templateFile);
VideoCapture capture=new VideoCapture(inFile);
Mat frame = new Mat();
Mat result = new Mat();
capture.read(frame);
// / Do the Matching and Normalize
Imgproc.matchTemplate(frame,templ, result, match_method);
Imgproc.threshold(result, result,0.9,1,Imgproc.THRESH_TOZERO);
//Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());
while(true)
{
// / Localizing the best match with minMaxLoc
Core.MinMaxLocResult mmr = Core.minMaxLoc(result);
Point matchLoc;
if (match_method == Imgproc.TM_SQDIFF || match_method == Imgproc.TM_SQDIFF_NORMED) {
matchLoc = mmr.minLoc;
} else {
matchLoc = mmr.maxLoc;
}
if(mmr.maxVal > 0.98)
{
// / Show me what you got
Imgproc.rectangle(frame, matchLoc,
new Point(matchLoc.x + templ.cols(),matchLoc.y + templ.rows()),
new Scalar(0,255,0),2);
Imgproc.rectangle(result, matchLoc,
new Point(matchLoc.x + templ.cols(),matchLoc.y + templ.rows()),
new Scalar(0,255,0),-1);
nbr++;
}
else
{
return nbr;
}
}
}
答案 0 :(得分:0)
确保您正在正确访问视频,以便使用:
while(camera.read(frame))
因为,这是一个视频,您需要访问其中的所有帧,以便在使用时使用。
还有你的结果图片,即
Mat result = new Mat();
必须如下所示,以便两个图像具有相同的大小并且具有相同的颜色代码。
所以改成它,
new Mat(frame.rows(), frame.cols(), Highgui.CV_LOAD_IMAGE_COLOR);
运行代码并告诉我它的工作天气..