1. 程式人生 > >Opencv學習1: 在Linux下編譯執行第一個opencv程式

Opencv學習1: 在Linux下編譯執行第一個opencv程式

前一段在安裝Caffe時候把Opencv2.4.11版本安裝在redhat6.4系統上,為了測試在Linux下如何編譯執行opencv程式碼,特意查詢了網上相關資料(主要參考三個網頁)。本文主要給出三種編譯執行的方式:命令列的方式;Makefile(兩種)方式;Cmake工具方式。

本文測試的源程式比較簡單,怎麼顯示lena.jpg影象的程式碼testShowLena.cpp。

#include<iostream>
#include<highgui.h>
using namespace std;
using namespace cv;

int main(){

    Mat srcImage = imread("lena.jpg"
); imshow("raw image", srcImage); waitKey(0); return 0; }
  1. 命令列方式編譯執行
    在終端中輸入:
    g++ testShowLena.cpp -o testShowLena pkg-config --cflags --libs opencv
    或者
    icpc testShowLena.cpp -o testShowLena pkg-config --cflags --libs opencv
    icpc是Intel的C++編譯器
    使用pkg-config時,選項–cflags 它是用來指定程式在編譯時所需要標頭檔案所在的目錄,選項 –libs則是指定程式在連結時所需要的動態連結庫的目錄。
    產生testShowLena可執行檔案,然後執行./testShowLena 即可顯示影象

    這裡寫圖片描述

  2. Makefile 檔案編譯
    2.1 採用pkg-config編寫的makefile

#================================================================================
#
# Makefile1 for testing OPENCV 
#
# Email: wjzln57@gmail.com
#
#================================================================================
#CC = g++
CC = icpc

CFLAGS
= -Wall -Wconversion -O3 IFLAGS = `pkg-config --cflags opencv` LIBS = `pkg-config --libs opencv` #================================================================================ SOURCE_FILE:=testShowLena.cpp # multifile # SOURCE_FILE:=testShowLena.cpp \ # test2.cpp \ # test3.cpp TARGET = testShowLena OBJS = ${SOURCE_FILE:%.cpp=%.o} all: $(TARGET) $(TARGET):${OBJS} $(CC) $(IFLAGS) -o $(TARGET) $(OBJS) $(LIBS) .SUFFIXES: .SUFFIXES:.cpp .o .cpp.o: $(CC) $(CFLAGS) -o [email protected] -c $< $(IFLAGS) clean: rm -f *.o *~ $(TARGET) #================================================================================
2.2 沒有采用pkg-config編寫的makefile
#================================================================================
#
# Makefile2 for testing OPENCV 
#
# Email: [email protected]
#
#================================================================================

CC = g++
# CC = icpc

CFLAGS = -Wall -Wconversion -O3

IFLAGS = -I.
IFLAGS += -I/usr/local/include/opencv -I/usr/local/include/opencv2
IFLAGS += -I/usr/local/include/opencv2/calib3d
IFLAGS += -I/usr/local/include/opencv2/contrib
IFLAGS += -I/usr/local/include/opencv2/core
IFLAGS += -I/usr/local/include/opencv2/features2d
IFLAGS += -I/usr/local/include/opencv2/flann
IFLAGS += -I/usr/local/include/opencv2/gpu
IFLAGS += -I/usr/local/include/opencv2/highgui
IFLAGS += -I/usr/local/include/opencv2/imgproc
IFLAGS += -I/usr/local/include/opencv2/legacy
IFLAGS += -I/usr/local/include/opencv2/ml
IFLAGS += -I/usr/local/include/opencv2/nonfree
IFLAGS += -I/usr/local/include/opencv2/objdetect
IFLAGS += -I/usr/local/include/opencv2/ocl
IFLAGS += -I/usr/local/include/opencv2/photo
IFLAGS += -I/usr/local/include/opencv2/stitching
IFLAGS += -I/usr/local/include/opencv2/superres
IFLAGS += -I/usr/local/include/opencv2/ts
IFLAGS += -I/usr/local/include/opencv2/video
IFLAGS += -I/usr/local/include/opencv2/videostab
IFLAGS += -g

LIBS = 
LIBS += -L/usr/local/lib/ -lopencv_core -lopencv_imgproc \
        -lopencv_flann -lopencv_highgui -lopencv_features2d \
        -lopencv_calib3d -lopencv_contrib -lopencv_gpu -lopencv_legacy \
        -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo \
        -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video \
        -lopencv_videostab

#================================================================================

SOURCE_FILE:=testShowLena.cpp

# multifile 
# SOURCE_FILE:=testShowLena.cpp \
    # test2.cpp \
    # test3.cpp
TARGET = testShowLena

OBJS = ${SOURCE_FILE:%.cpp=%.o}

all: $(TARGET)

$(TARGET):${OBJS}
    $(CC) $(IFLAGS) -o $(TARGET) $(OBJS) $(LIBS)

.SUFFIXES:
.SUFFIXES:.cpp .o

.cpp.o:
    $(CC) $(CFLAGS) -o [email protected] -c $< $(IFLAGS)

clean:
    rm -f *.o *~ $(TARGET)

#================================================================================
3. 採用Cmake工具編譯

把上述兩種方式生成的Makefile換成其他名字,因為Cmake編譯時會自動推導生成Makefile檔名,防止覆蓋。
3.1 在testShowLena.cpp和lena.jpg資料夾下新建一個Cmake工具編譯時所需要的檔案CMakeList.txt。
3.2 編輯CMakeList.txt
PROJECT(testShowLena) 

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

FIND_PACKAGE( OpenCV REQUIRED )

ADD_EXECUTABLE(testShowLena  testShowLena.cpp) 

TARGET_LINK_LIBRARIES(testShowLena ${OpenCV_LIBS})
第一行是建立一個工程專案名字;
第二行是設定Cmake工具版本的最低要求;
第三行是用來查詢opencv包的;
第四行是用工程專案名和要編譯的檔名;
第五行是連結到OpenCV庫的環節。

3.3 執行cmake .
-- Configuring done
-- Generating done
-- Build files have been written to :/home/users/wangjie/OPENCV/test1
同時生成Makefile檔案。
3.4 執行make 生成可執行檔案 testShowLena
3.5 執行 ./testShowLena即可

相關推薦

Opencv學習1: 在Linux編譯執行一個opencv程式

前一段在安裝Caffe時候把Opencv2.4.11版本安裝在redhat6.4系統上,為了測試在Linux下如何編譯執行opencv程式碼,特意查詢了網上相關資料(主要參考三個網頁)。本文主要給出三種編譯執行的方式:命令列的方式;Makefile(兩種)方式;

java基礎(1)-----編寫並執行一個java程式

 下面是一個簡單的java程式,將在控制檯輸出hello world public class HelloWorld { public static void main(String[] args) { System.out.println("Hello Wor

kafka學習(1)linux的安裝和啟動,以及Java示例程式碼

1. 安裝 1.1 下載kafka並解壓 wget http://mirror.bit.edu.cn/apache/kafka/0.11.0.0/kafka_2.11-0.11.0.0.tgz tar -zxvf kafka_2.11-0.11.0.0.tgz 1.2 修改

OpenCV學習筆記 - 安裝及執行一個OpenCV程式

1、下載及安裝  OpenCV是一套開源免費的圖形庫,主要有C/C++語言編寫,官網: http://opencv.org/ 。在 http://opencv.org/downloads.html 可以找到個版本和各種平臺的程式包。OpenCV的Windows平臺安

Linux編譯執行Go程式

編譯 go build test.go 指定輸出檔案 go build -o mygameserver 修改許可權命令 chmod 777 程式名稱 後臺執行的命令 nohup ./程式名 & 不輸出錯誤資訊 nohup .

Ubuntu 16.04 使用CMake編譯一個OpenCV程式

在安裝Ubuntu 16.04的時候,安裝的編輯器是sublime text 3,所以一直想將對OpenCV程式的編譯能力直接配置到sublime裡,但是在網上找了好多教程,發現基本上是在sublime裡面重新配置一下GCC編譯器,但只給了一段程式碼,具體每部分

Linux編譯執行C程式

程式碼變成可執行檔案叫做編譯(compile);先編譯這個還是先編譯那個這個(即編譯的安排)叫做構建(build) 我們在Linux環境下編譯C語言需要gcc. 1.配置GCC    剛裝好的系統已經有GCC了,但是這個GCC什麼檔案都不能編譯,因為沒有一些必要的標頭

1-系統方案A(系統方案演示和執行一個Android程式,ListView顯示資料,刪除資料)

系統教程初步要做到的就是12節和13節所演示的 12節:  https://www.cnblogs.com/yangfengwu/p/9966702.html 13節:  https://www.cnblogs.com/yangfengwu/p/9966901.html  

Mac上執行一個opencv車輛檢測示例

Mac上執行第一個opencv車輛檢測示例 挑選一個比較好的開源實現: https://github.com/JunshengFu/vehicle-detection MacOS上搭建環境 基於 python3.7 pip 18.1 1)首先下載開原始碼到本地 2)下載YOL

在VMware虛擬機器安裝Android Studio(AS)以及執行一個HelloWorld程式

1、JDK 1.1下載  百度一下“JDK”即可 1.2安裝 選擇安裝目錄 C:\java JAVA_HOME→C:\java         PATH→C:\java\bin 2、android studio (AS) 2.2安裝  遇到的問題: 1.新建

執行一個Spark程式

我們這裡使用官方的Spark自帶的一個程式來體驗一下Spark的執行 Spark自帶的例子是利用蒙特·卡羅演算法求PI 在Spark目錄下執行下面命令 bin/spark-submit \ >--master spark://cdh0:7077 \ >--class org.

spark本地環境的搭建到執行一個spark程式

搭建spark本地環境 搭建Java環境 (1)到官網下載JDK 官網連結:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html (2)解壓縮到指定的目錄 >sudo t

MyGUI3.2.0+Ogre1.8.1開發詳解之一個MyGUI程式

  mygui是一款簡單、易用的開源圖形介面開發庫,主要面向物件是遊戲的3D介面,下面是它的官方介紹 MyGUI是為遊戲和3D應用程式建立圖形使用者介面(GUI)的一個庫。 mygui的主要目標是:速度,靈活性和易用性。(出自MyGUI官網) 官方網站:http

Spark 執行一個Scala程式WordCount

安裝 首先去官網下載Spark。注意Spark和Hadoop之間版本對應關係,我自己裝的Hadoop 2.7.5版本,按照下面方式下載即可。 下載完成後,解壓安裝包至路徑/usr/local tar -zxf ./spark-2.3.0-bin-had

OpenCV嵌入式影象處理(四)一個OpenCV程式

在裝完了OpenCV和CUDA之後很自然的事情就是先跑個程式看看庫函式是否安裝完畢。對於在Windows下習慣用Visual Studio的同志們來說,可能很多人還不知道可以不用IDE程式設計(至少我當年轉Linux的時候就在想,用記事本寫程式,那工程檔案去哪了

Flask學習日誌一(2)-一個flask程式

# 從flask這個框架匯入flask這個類 from flask import Flask #初始化一個Flask物件 # Flask() # 需要傳遞一個引數 __name__ # 1.方便fla

初探Docker及使用Docker執行一個JavaWeb程式

1 什麼是Docker 1-1 Docker歷史 2010 dotCloud PAAS 2013 Docker開源 2014.6 Docker 1.0 2014.7 C輪 $4000萬 2015.4 D輪 $9500萬 1-2 什麼是Docker? Doc

編寫並執行一個Lisp程式

       我覺得接觸一門新的程式語言的時候第一個程式的編寫至關重要,這能夠讓我快速瞭解到簡單的語法以及執行方法。而執行方法基本上是我更為關注的,因為這將是後期學習過程中不斷打交道的東西。        為了能夠彌補工作中那種浪費時間的懊悔感,我決定學習一個新的程式語言,

【VS開發】【OpenGL開發】OpenGL---Windows配置與一個OpenGL程式

面記錄一下Windows下配置OpenGL與我的第一個OpenGL程式。 第一步:選擇一個編譯環境 現在Windows系統的主流編譯環境有Visual Studio,Broland C++ Builder,Dev-C++等,它們都是支援OpenGL的。但這裡我選擇的是V

建立並執行一個OSGi程式-HelloWorld

還記得我們在學習Java語言、C語言、或C++語言等各個計算機語言時都寫過的 HelloWorld 嗎?那些 HelloWorld 程式都是在執行後輸出一個“Hello World”,然後就結束了程式,我們今天來看看OSGi中的HelloWorld 程式,該程式