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

用于模板匹配的OpenCV读取图像

夏骞尧
2023-03-14

Im使用java中的OpenCV,使用eclipse开发,图像以这种方式读取以进行模板匹配。

String inFile = "C:/image.png";
Mat img = Highgui.imread(inFile);

这很好,但我的图像不在本地计算机中。我应该比较mysql数据库中服务器上的2000个图像。把2000张图片保存到我的电脑上,然后读取它们是没有意义的。

所以我需要的是那个高鬼。imread(infle)读取图像:Highgui。imread(图像中的图像)或Highgui。imread(文件填充),我找不到要编辑/修改的java源代码。我需要某种方式来转换我的图像,将来自mysql数据库的Mat类型进行比较(模板匹配)。。。

更多信息:我有一个mysql表,包含以下列:ID、名称、描述、Image1、Image2。Image1和Image2列的类型为“mediumblob”,当您右键单击“MySQL工作台”中的Image1或Image2列时,我选择“在编辑器中打开值”,则有3个选项卡;二进制,文本,图像,在图像我的图像显示完美。图像类型为png。最后,我想比较一下Image1和Image2。Image2是内嵌的,Image1是模板文件。

对不起,我以为我的问题很清楚。我会试着重新措辞。我有一台本地电脑和一台服务器。图像存储在服务器上的mysql数据库中。我想从我的本地计算机运行一个应用程序,检索/访问服务器上的2个图像,然后通过OpenCV模板匹配进行比较。Afaik你不能访问mysql与 /server/home/user/mysql/image_table/mypicture.png列,我写这是因为"Guneykayim"的建议。所以我计划如何检索图像,还没有尝试,但计划是:

Blob imageBlob = resultSet.getBlob(yourBlobColumnIndex);
InputStream binaryStream = imageBlob.getBinaryStream(0, imageBlob.length());

或者

InputStream binaryStream = resultSet.getBinaryStream(yourBlobColumnIndex);

或者

try{
    Class.forName(driverName);
    con = DriverManager.getConnection(url+dbName,userName,password);
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("select image from image");
    int i = 0;
    while (rs.next()) {
        InputStream in = rs.getBinaryStream(1);
        OutputStream f = new FileOutputStream(new File("test"+i+".jpg"));
        i++;
        int c = 0;
        while ((c = in.read()) > -1) {
            f.write(c);
        }
        f.close();
        in.close();
    }
}catch(Exception ex){
    System.out.println(ex.getMessage());
}

我的问题:我想比较2图像,我从mysql数据库检索。

Highgui.imread(); 

此方法需要一个字符串,但我想给出InputStream或OutputStream文件。。。就像我说的,我不想在本地计算机上保存2000张图像。我也对其他方式持开放态度。

最后一个最简单的改写:如何在mysql数据库中存储的两个图像上使用java OpenCV的模板匹配。

换句话说,我如何将InputStream对象转换为Mat对象?

谢谢你的阅读。

共有1个答案

夏侯昆琦
2023-03-14

我在这里找到了答案这家伙的荣誉,他是我的英雄:)完美的作品,如果你想要的图像在原来的颜色,而不是在灰度你应该改变Highgui.IMREAD_GRAYSCALEHighguiIMREAD_UNCHANGED更多信息检查

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

  • 请尝试在java中创建一个新的应用程序来匹配图片和视频,图片中模板的匹配工作正常,但当我尝试为视频执行此操作时,总是会出现以下错误消息: OpenCV错误:断言失败((深度==CV_8U||深度==CV_32F) 这是我的视频图片匹配功能,有人可以帮忙。

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

  • 包的类提供读取和写入图像的方法。使用OpenCV,可以读取图像并将其存储在矩阵中(如果需要,可在矩阵上执行转换)。之后可以将处理后的矩阵写入文件。 类的方法用于使用OpenCV读取图像。 以下是此方法的语法。 它接受一个参数(文件名),一个字符串类型的变量,表示要读取的文件的路径。 下面给出了使用OpenCV库读取Java图像的步骤。 第1步:加载OpenCV本机库 使用方法加载OpenCV本机库

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

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