【问题标题】:How to convert Blob to Mat in java opencv?如何在 java opencv 中将 Blob 转换为 Mat?
【发布时间】:2020-05-21 14:35:21
【问题描述】:

我正在尝试从存储为 blob 的 MySQL 数据库中获取图像并将它们转换为 Mat 对象以进行图像处理。我有一个模板图像,想知道该图像是否是 db 图像的一部分或不使用 matchTemplate() 函数。这是我的代码:

String sql="select * from image_data where image_id="+1
try
        {
            query obj_query=new query(obj_connect);
            ResultSet rs = obj_query.runSimpleQuery(sql);
            while (rs.next()) 
            {
                Blob image_blob=rs.getBlob("original_image");
                Mat img=Imgcodecs.imread(image_blob.toString());            
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
Mat templ=Imgcodecs.imread("templ.png");

findTemplate 函数中传递这些图像:

MatchTemplate.findTemplete(img, templ, "ress.png", Imgproc.TM_SQDIFF);

这是我的findTemplate 函数:

public static void findTemplete(Mat img, Mat templ, int match_method) 
     {
        double minVal;
        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);
        Imgproc.matchTemplate(img, templ, result, match_method);
        MinMaxLocResult mmr = Core.minMaxLoc(result);
        minVal = mmr.minVal;
        if(minVal<=0.75){
            //do what you want
        }
        else
        {
            //do what you want
        }
    }

当我运行它时,它给了我一个错误:

OpenCV Error: Assertion failed (s >= 0) in cv::setSize, file C:\builds\master_PackSlaveAddon-win32-vc12-static\opencv\modules\core\src\matrix.cpp, line 306
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: C:\builds\master_PackSlaveAddon-win32-vc12-static\opencv\modules\core\src\matrix.cpp:306: error: (-215) s >= 0 in function cv::setSize
]
    at org.opencv.core.Mat.n_Mat(Native Method)
    at org.opencv.core.Mat.<init>(Mat.java:37)

它给我错误的行是:

Mat result = new Mat(result_rows, result_cols, CvType.CV_32FC1);

如何处理 Blob 图像以将其传递给 Imagecodecs.imread() 函数?还是有另一种技术可以将Blob 转换为Mat

【问题讨论】:

  • 您应该使用imdecode 而不是imread。也看看here
  • 您提供的 @Miki 链接采用 C++ 代码。我正在使用java和mysql。你能给我一个java例子吗?

标签: java opencv


【解决方案1】:

就这么简单。

byte[] decodedString = Base64.decode(imageBlob, Base64.DEFAULT);
Bitmap img = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
Mat mat_img = new Mat();
Utils.bitmapToMat(img1, mat_img1);

【讨论】:

    猜你喜欢
    • 2015-11-19
    • 2013-08-27
    • 2022-06-25
    • 2016-10-22
    • 2014-03-11
    • 2011-09-12
    • 2023-03-09
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多