linux 下 opencv程序怎么编译

linux 下 opencv程序怎么编译,第1张

运行了楼上给的命令之后,结果是这样的:

# g++ `pkg-config opencv --libs --cflags opencv` facedect.cpp -o facedect -static

/tmp/cc8XhRf6.o: In function `find_face(_IplImage*)':

facedect.cpp:(.text+0x51): undefined reference to `cvCreateImage'

facedect.cpp:(.text+0xc0): undefined reference to `cvCreateImage'

facedect.cpp:(.text+0xdd): undefined reference to `cvCvtColor'

facedect.cpp:(.text+0xf7): undefined reference to `cvResize'

facedect.cpp:(.text+0x109): undefined reference to `cvEqualizeHist'

facedect.cpp:(.text+0x116): undefined reference to `cvClearMemStorage'

facedect.cpp:(.text+0x188): undefined reference to `cvHaarDetectObjects'

facedect.cpp:(.text+0x1c6): undefined reference to `cvReleaseImage'

facedect.cpp:(.text+0x1d1): undefined reference to `cvReleaseImage'

/tmp/cc8XhRf6.o: In function `isperson(char const*)':

facedect.cpp:(.text+0x21e): undefined reference to `cvLoad'

facedect.cpp:(.text+0x22f): undefined reference to `cvCreateMemStorage'

facedect.cpp:(.text+0x25a): undefined reference to `cvLoadImage'

facedect.cpp:(.text+0x27d): undefined reference to `cvReleaseImage'

facedect.cpp:(.text+0x289): undefined reference to `cvDestroyWindow'

collect2: ld returned 1 exit status

预备

GCC

CMake

OpenCV

这些都可以在CentOS 6.0的“添加/删除软件”里面找到并安装。其他Linux版本可以选择用编译后安装或者在Rpmfind寻找二进制安装版本:

http://rpmfind.net/

CentOS安装OpenCV 2.4+

下载OpenCV 2.4+压缩包解压到一个文件夹里,如:/home/me/opencv/

构建Makefile,在终端输入,进行构建:

cd /home/me/opencv/

cmake .

进行编译并安装,编译过程可能有些警告发生,请无视这些警告:

make

make check

make install

写一个OpenCV程序

新建一个简单的程序,例如:DisplayImage.cpp。

#include <stdio.h>

#include <cv.h>

#include <highgui.h>

//使用cv这个命名空间

using namespace cv

/*主函数

*C语言规定main函数只能有两个参数,

*习惯上将这两个参数写成argc和argv。

*第一个代表(传参个数+1),

*第二个代表传惨数据。

*一般有两种写法:

*main( int argc, char* argv[])

*main( int argc, char** argv)

*/

int main( int argc, char** argv )

{

//建立一个Mat类型的变量image

Mat image

/* API中有:

* C++: Mat imread(const string&filename, int flags=1 )

* 意思是返回Mat类型数据,第一个参数接受一个string类型的引用,

* 第二个参数接受一个int类型的flags,一般都是1。

*/

image = imread( argv[1], 1 )

//当传的参数不是一个,或者图片没有数据则提示没有图片并退出程序

if( argc != 2 || !image.data )

{

printf( "没有该图片 \n" )

return -1

}

//C++: void namedWindow(const string&winname, int flags=CV_WINDOW_AUTOSIZE )

namedWindow( "显示图片", CV_WINDOW_AUTOSIZE )

//C++: void imshow(const string&winname, InputArray mat)

imshow( "显示图片", image )

//C++: int waitKey(int delay=0)

waitKey(0)

return 0

}

新的头文件写法

同样的程序,可以用新的头文件写法来写:

#include "opencv2/core/core.hpp"

#include "opencv2/highgui/highgui.hpp"

#include <stdio.h>

using namespace cv

int main( int argc, char** argv ){

Mat image

image = imread( argv[1])

if( argc != 2 || !image.data ){

printf("没有图片\n")

return -1

}

namedWindow( "显示图片", CV_WINDOW_AUTOSIZE )

imshow( "显示图片", image )

waitKey(0)

return 0

}

创建一个对应的CMake文件

新建一个CMakeLists.txt,内容大概是这样的:

project( DisplayImage )

find_package( OpenCV REQUIRED )

add_executable( DisplayImage DisplayImage )

target_link_libraries( DisplayImage ${OpenCV_LIBS} )

生成可执行文件

cd <DisplayImage_directory>

cmake .

make

结果

生成了一个DisplayImage文件,所以运行这个文件,将文件路径传进去:

./DisplayImage lena.jpg

你就能看到图片了

OpenCV是一个基于开源发行的跨平台计算机视觉库,它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。在linux上安装opencv的方法如下:

工具:

Windows7、VMware Workstation 12 Pro、ubuntu-15.10、opencv-3.0.0.zip

步骤:

一、安装关联库

1、安装编译工具:sudo apt-get install build-essential

编译程序有了这个软件,它才知道头文件和库函数在哪,最后才形成一个开发环境。

2、安装 cmake、git、pkg-config等辅助工具:sudo apt-get install cmake git pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev

3、安装关联库:sudo apt-get install python-dev python-opencv python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

二、编译OpenCV

1、从网上下载OpenCV-3.0.0.zip。下载地址http://opencv.org/downloads.html

2、如果使用虚拟机,最好将OpenCV-3.0.0.zip移动到用户主目录下进行编译,一定不能在虚拟机在Windows系统里的共享文件夹下进行编译,否则会因为文件系统(Windows7的文件系统是NTFS,ubuntu-15.10的文件系统是)不同在编译过程中出错。鄙人在共享文件夹下进行编译,编译进行到%15时报错,我修复后又在编译进行到%21时报错,反正是各种错误,我是没有能力继续修复了......

3、最好将OpenCV-3.0.0.zip移动到用户主目录下进行编译:mv [OpenCV-3.0.0.zip存放路径] ~/opencv_3.0.0.zip、unzip opencv_3.0.0.zip、cd opencv-3.0.0、mkdir release、cd release

4、CMake是一个跨平台的编译工具,想深入学习cmake命令的可以百度一下。

编译命令:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..

5、make命令(-j表示用几个线程来编译,这样可以加快编译速度,不过这个与makefile的质量有关,有的工程用了-j会编译出错):

make -j $(nproc)

上述命令后一般大约要耗时1个小时,甚至更多,视个人电脑硬件配置而定。

执行完以后不要忘了make install:

sudo make install

6、如果编译过程出错后想要重新编译,把release目录下的CMakeCache.txt删除掉即可。

三、设置环境变量

1、添加库路径:sudo /bin/bash -c 'echo "/usr/local/lib" >/etc/ld.so.conf.d/opencv.conf'

2、更新系统库:sudo ldconfig

四、用cmake进行测试

1、DisplayImage.cpp中的源代码

#include <stdio.h>

#include <opencv2/opencv.hpp>

using namespace cv

int main(int argc, char** argv)

{

    if ( argc != 2 )

    {

        printf("[usage]: %s <Image_Path>\n", argv[0])

        return -1

    }

    Mat image

    image = imread( argv[1], 1 )

    if ( !image.data )

    {

        printf("No image data!\n")

        return -1

    }

    namedWindow("Display Image", WINDOW_AUTOSIZE )

    imshow("Display Image", image)

    waitKey(0)

    return 0

}

2、CMakeLists.txt中的源代码:

cmake_minimum_required(VERSION 2.8)

project( DisplayImage )

find_package( OpenCV REQUIRED )

add_executable( DisplayImage DisplayImage.cpp )

target_link_libraries( DisplayImage ${OpenCV_LIBS} )

3、编译命令:

cmake .make

运行命令:./DisplayImage 01.jpg

五、用make进行测试

1、opencv_test.cpp中的源代码:

#include "cv.h"

#include "highgui.h"

#include <iostream>

using namespace std

#define PICTURE "./01.jpg"

int main(void)

{

    IplImage* img = cvLoadImage(PICTURE, 0)

    cvNamedWindow( "test", 0 )

    cvShowImage("test", img)

    cvWaitKey(0)

    cvReleaseImage( &img )

    cvDestroyWindow( "test" )

    return 0

}

2、Makefile中的源代码:

CXX          = g++

CFLAGS    = -Wall 

LDFLAGS  = `pkg-config --cflags --libs opencv`

SRCS = $(wildcard *.cpp)

TARGETS = $(patsubst %.cpp, %, $(SRCS))

all:$(TARGETS)

$(TARGETS):$(SRCS)

   $(CXX) -o $@ $< $(LDFLAGS) $(CFLAGS)

clean:

   -rm -rf $(TARGETS) *~ .*swp

.PHONY: clean all

编译命令:

make

运行命令:

./opencv_test

代码写得比较简单,所以显示效果是一张黑白图片。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11721195.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存