当前位置: 首页 > 知识库问答 >
问题:

视频中的OpenCv匹配模板[Java]

应志用
2023-03-14

请尝试在java中创建一个新的应用程序来匹配图片和视频,图片中模板的匹配工作正常,但当我尝试为视频执行此操作时,总是会出现以下错误消息:

OpenCV错误:断言失败((深度==CV_8U||深度==CV_32F)

这是我的视频图片匹配功能,有人可以帮忙。

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;
         }

        }

    }

共有1个答案

赫连秦迟
2023-03-14

确保您正确访问视频,以便使用:

while(camera.read(frame)) 

因为,这是一个视频,你需要访问其中的所有帧,所以使用而。

还有你的结果图像,即

Mat result = new Mat();

必须如下所示,以便两个图像具有相同的大小和相同的颜色代码

所以换成这个,

new Mat(frame.rows(), frame.cols(), Highgui.CV_LOAD_IMAGE_COLOR);

运行代码并告诉我它是否有效...

 类似资料:
  • 问题内容: 我正在尝试基本上在Java上进行模板匹配。我使用简单的算法来找到匹配项。这是代码: 但这是非常缓慢的方法。我测试了2张图像(768×1280)和子图像(384 x 640)。这持续了很长时间。openCV是否可以使用现成的函数cvMatchTemplate()快速执行模板匹配? 问题答案: 您会发现openCV cvMatchTemplate()比您已实现的方法快得多。您创建的是一种统

  • 我正在进行一个小型的个人项目,我必须知道所显示的图像是否是一辆汽车。我使用的是基本的基于OpenCV python的模板匹配。 汽车俯视图:-https://i.stack.imgur.com/zXr1U.jpg 简单的模板匹配是使用一个正图像对另一个正图像进行匹配,从而得到所需的结果。 但是当我们使用像https://i.stack.imgur.com/YLVwc.jpg这样的负面图像时,模板查

  • Im使用java中的OpenCV,使用eclipse开发,图像以这种方式读取以进行模板匹配。 这很好,但我的图像不在本地计算机中。我应该比较mysql数据库中服务器上的2000个图像。把2000张图片保存到我的电脑上,然后读取它们是没有意义的。 所以我需要的是那个高鬼。imread(infle)读取图像:Highgui。imread(图像中的图像)或Highgui。imread(文件填充),我找不

  • 目标 在这一章中,你将学习 使用模板匹配查找图像中的对象 你会学会这些函数:cv2.matchTemplate(),cv2.minMaxLoc() 理论基础 模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。 OpenCV为此提供了一个函数cv2.matchTemplate()。它只是将模板图像滑过输入图像(就像2D卷积那样),并将模板图像和输入图像的一小块进行比较。在OpenCV中实现了几

  • 目标 在本章中,您将学习 使用模板匹配在图像中查找对象 你将看到以下功能:cv.matchTemplate(),cv.minMaxLoc() 理论 模板匹配是一种用于在较大图像中搜索和查找模板图像位置的方法。为此,OpenCV带有一个函数cv.matchTemplate()。 它只是将模板图​​像滑动到输入图像上(就像在2D卷积中一样),然后在模板图像下比较模板和输入图像的拼图。 OpenCV中实

  • 我有以下输入: 我的XSL: 目标是对于每个具有query结果/记录的“query1”,我从该query结果/记录/列[@name='id_contact']中获取值,并从“query2”中删除每个在query2/query结果/记录/列[@name='id_contact']中具有该值的记录。这部分可以工作,但下一部分不能正常工作:然后,在删除query2中的值后,获取剩余的query2/id_