OpenCV在ubuntu下的编译

╄→гoц情女王★ 提交于 2019-11-29 04:42:57

opencv的编译

下面我们写一个shell命名为build.sh放在opencv的根目录下面,代码如下:

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

其他编译参数请参考博客

在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目录下
注:opencv生成的包分为静态包和动态包,推荐生成静态包,静态调用会省去许多不必要或者是不知道的动态链接库的加载。 接下来我们把包导入到idea中。 下面给出一个基于Config的opencv启动器
project/src/org/uestc/config

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.properties

max_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(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库

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!