文档章节

java调用opencv人脸识别 error insufficient out of memory

rock912
 rock912
发布于 2016/08/19 12:11
字数 310
阅读 176
收藏 2

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了java, Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

在用java的jni调用opencv时,识别单张图片没问题,当图片数量很多时,报错

OpenCV Error: Insufficient memory (Failed to allocate 411068927 bytes) in cv::OutOfMemoryError, file opencv\modules\core\src\alloc.cpp, line 52 OpenCV Error: 

​
        System.out.println("\nRunning Template Matching");

        Mat img = Highgui.imread(inFile);
        Mat templ = Highgui.imread(templateFile);

        // / Create the result matrix
        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_64FC1);

        // / Do the Matching and Normalize
        Imgproc.matchTemplate(img, templ, result, match_method);
        Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());

        // / Localizing the best match with minMaxLoc
        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;
        }
        
        
        // / Show me what you got
        Core.rectangle(img, matchLoc, new Point(matchLoc.x + templ.cols(),
                matchLoc.y + templ.rows()), new Scalar(0, 255, 0));

        // Save the visualized detection.
        System.out.println("Writing "+ outFile);
        Highgui.imwrite(outFile, img);

​

jni调用native的c++方法是内存溢出,原来是没释放对象。显示调用:

img.release();

templ.release();
 result.release();

解决。c++就是麻烦,主动释放引用的对象。

© 著作权归作者所有

rock912
粉丝 30
博文 89
码字总数 23653
作品 0
宁波
程序员
私信 提问
java Bufferdimage与opencv Mat在内存中的转化

以前写Java人脸识别爬虫的时候遇到的问题,最早的时候是用tempfile的形式去解决识别的问题,每一个爬虫线程爬取图片到本地,保存为tempfile,然后opencv再读取出来做处理和识别,但是这样涉及...

Pulsar-V
03/30
0
0
centos操作系统 ,opencv, java调用编译后的opencv动态链接库报错

各位大牛好: 遇到一个棘手问题需要请教各位有opencv经验开发的大牛。 在centos6.5/opencv2.4.9/jdk1.7/cmake3.0环境下,编译opencv 并支持java模块,编译成功后,通过opencv编译后的build 生...

yanfengben
2014/10/24
2.1K
2
opencv3.2.0在Mac上面编译成jar

网上查了一堆的资料,发现大家主要有三种方式在Mac上面编译opencv的jar: 使用brew编译 使用cmake手动编译 使用maven编译(类似手动) brew编译没有成功,另外两种都成功了。 brew编译 检查X...

亚林瓜子
2018/07/18
0
0
Linux下面安装OpenCV3.3.0

最近写了一个J2EE的项目,其中用到了OpenCV的相关内容,所以下载了一个OpenCV库,并且在Windows下面做了开发测试,话不多说,这里直接给下载链接 https://opencv.org/opencv-3-3.html 。在这...

数据为王
2018/05/21
0
0
OpenCV4Android+JNI开发快速上手入门

最近尝试了一下在Android上试验简单的一些OpenCV算法,发现OpenCV4Android SDK非常好用,提供大部分常用的OpenCV功能的Java API。当然如果直接对图像像素进行操作的话Java会比较没有效率,这...

bli
2013/12/02
0
2

没有更多内容

加载失败,请刷新页面

加载更多

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
今天
15
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
10
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
10
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
14
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部