专栏首页Pulsar-VOpenCV在ubuntu下的编译

OpenCV在ubuntu下的编译

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库

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Core Linux 操作文档(一)

    目录 Core Linux折腾(一)[一] Core Linux折腾(一)[二] Core Linux折腾(二) Core Linux折腾(三) Co...

    Pulsar-V
  • websocket传输canvas图像数据给C++服务端opencv图像实现web在线实时图像处理

    前后端的耦合想了很久,上下课都在思考怎么做,然后终于憋出来了。这是之前搞的一个视觉计算的项目,boss叫对接到前端,于是就产生了这样一个诡异的需求,就是前端打开...

    Pulsar-V
  • Math-Model(五)正交分解(QR分解)

    矩阵的正交分解又称为QR分解,是将矩阵分解为一个正交矩阵Q和一个上三角矩阵的乘积的形式。

    Pulsar-V
  • Flink DataStream维度表Join的简单方案

    在编写基于Flink的ETL程序时,我们经常需要用维度数据丰富我们接入的流式数据,如通过商品ID获得商品名称、通过商品分类ID获得分类名称等等。而维度表基本都位...

    王知无
  • 聊聊nacos NamingProxy的getServiceList

    nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/naming/net/NamingProxy...

    codecraft
  • 聊聊nacos NamingProxy的getServiceList

    nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/naming/net/NamingProxy...

    codecraft
  • String s=new String("abc")创建了几个对象?

    String str=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?

    week
  • LeetCode 804 Unique Morse Code Words

    首先为每个单词的每个字符进行转码, 将转码后的数据放到 Set 集合中, 最后返回 Set 的长度。

    一份执着✘
  • Flink从入门到放弃-Flink分布式缓存

    在用户函数中访问缓存文件或者目录(这里是一个map函数)。这个函数必须继承RichFunction,因为它需要使用RuntimeContext读取数据:

    王知无
  • 7-Flink的分布式缓存

    Flink提供了一个分布式缓存,类似于hadoop,可以使用户在并行函数中很方便的读取本地文件,并把它放在taskmanager节点中,防止task重复拉取。

    王知无

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动