下面咱们写一个shell命名为build.sh放在opencv的根目录下面,代码以下:java
mkdir $1 cd $1 cmake -DWITH_QT=ON -DWITH_OPENGL=ON -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_GDAL=ON -DWITH_XINE=ON -DBUILD_EXAMPLES=ON -DBUILD_opencv_java=ON BUILD_opencv_test_java=OFF .. make -j8
其余编译参数请参考博客c++
在Windows下的编译能够直接使用CMake GUI进行设置配置
如图 shell
选择本身须要的类型的配置参数(如编译器类型,编译参数)apache
接下来咱们运行一下
sh ./build.sh build
windows
便可在bin目录下找到生成的opencv buildoracle
生成opencv的Java包一直是一个会困扰Java党萌新的问题
按照官方给出的安装教程并不会生成OpenCV的jar包
首先咱们要安装ant
输入指令sudo apt-get install ant
在windows下ant 在安装ant须要去下载 apache 的ant包并设置好系统环境变量ANT_HOME
为相似 D:\apache-ant-1.10.1
安装目录ide
在上面c++安装编译的时候参数-DBUILD_opencv_java=ON
就已经帮咱们生成了jar的包在bin目录下
注:opencv生成的包分为静态包和动态包,推荐生成静态包,静态调用会省去许多没必要要或者是不知道的动态连接库的加载。 接下来咱们把包导入到idea中。 下面给出一个基于Config的opencv启动器
project/src/org/uestc/configui
package org.uestc.config; import java.io.*; import java.util.*; public class mainConfig{ BufferedInputStream user_in=null; BufferedInputStream sys_in=null; FileOutputStream user_file=null; FileOutputStream sys_file=null; private String sysPath="./config/sys.properties"; private String userPath="./config/config.properties"; public mainConfig(){ try { try { user_in = new BufferedInputStream(new FileInputStream(this.userPath)); sys_in = new BufferedInputStream(new FileInputStream(sysPath)); } catch (IOException e) { try { user_file = new FileOutputStream(userPath, true); sys_file = new FileOutputStream(sysPath, true); user_in = new BufferedInputStream(new FileInputStream(userPath)); sys_in = new BufferedInputStream(new FileInputStream(sysPath)); user_file.close(); sys_file.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } System.out.println("No Config file , System will auto Created"); } }catch (Exception e){ System.out.println("I/O Error"); } } private void setDefaultConfig(Map<String,String> info) throws IOException { Properties pps = new Properties(); Iterator<String> it=info.keySet().iterator(); while (it.hasNext()){ String key=it.next(); pps.setProperty(key,info.get(key)); } pps.store(user_file, "The New properties user_file"); } public Map<String,String> getUserConfig(){ Properties pps = new Properties(); Map<String,String> info=new HashMap<String,String>(); try { pps.load(user_in); Iterator<String> it=pps.stringPropertyNames().iterator(); while(it.hasNext()){ String key=it.next(); info.put(key,pps.getProperty(key)); } return info; } catch (IOException e1) { e1.printStackTrace(); } return info; } }
配置文件
project/config/config.propertiesthis
max_camera=100
入口文件idea
/** * Created by Summer-V on 17-4-12. */ import org.opencv.videoio.VideoCapture; import org.opencv.core.*; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class Main { public void video_start(Map<Integer,String> camera){ Iterator<Integer> cap=camera.keySet().iterator(); while (cap.hasNext()){ int index=cap.next(); new Thread(new Runnable() { @Override public void run() { videoViewer video=new videoViewer(); video.openWindow(index,camera.get(index),100); } }).start(); } public static void main(String[] args){ System.loadLibrary(Core.NATIVE_LIBRARY_NAME);//加载opencv库 mainConfig Config=new mainConfig(); Map<String,String> info=Config.getUserConfig(); Iterator<String> it=info.keySet().iterator(); while (it.hasNext()){ String key =it.next(); } VideoCapture cae=new VideoCapture(); for(int i=0;i<Integer.parseInt(info.get("max_camera"));i+=1){ Map<Integer,String> cap=new HashMap<Integer,String>(); if (cae.open(i)){ cap.put(i,"Camera"+i); video_start(cap); }else { break; } } } }
注:若是不存在引用关系的话,每一次都要加载opencv库