opencv的编译
下面我们写一个shell命名为build.sh放在opencv的根目录下面,代码如下:
mkdir $1cd $1cmake -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
其他编译参数请
在Windows下的编译可以直接使用CMake GUI进行设置配置
如图选择自己需要的类型的配置参数(如编译器类型,编译参数)
接下来我们运行一下
sh ./build.sh build
即可在bin目录下找到生成的opencv build
java版本的安装
1.Ant的安装(非Java可略过此处)
生成opencv的Java包一直是一个会困扰Java党萌新的问题
按照官方给出的安装教程并不会生成OpenCV的jar包 首先我们要安装ant 输入指令sudo apt-get install ant
在windows下ant 在安装ant需要去apache 的ant包并设置好系统环境变量ANT_HOME
为类似D:\apache-ant-1.10.1
安装目录 注:要安装oracle jdk不然有时候会出玄学问题
在上面c++安装编译的时候参数-DBUILD_opencv_java=ON
就已经帮我们生成了jar的包在bin目录下
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(Mapinfo) throws IOException { Properties pps = new Properties(); Iterator 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 getUserConfig(){ Properties pps = new Properties(); Map info=new HashMap (); try { pps.load(user_in); Iterator 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.propertiesmax_camera=100
入口文件
/** * 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(Mapcamera){ Iterator 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 info=Config.getUserConfig(); Iterator it=info.keySet().iterator(); while (it.hasNext()){ String key =it.next(); } VideoCapture cae=new VideoCapture(); for(int i=0;i cap=new HashMap (); if (cae.open(i)){ cap.put(i,"Camera"+i); video_start(cap); }else { break; } } }}
注:如果不存在引用关系的话,每一次都要加载opencv库