opencv2.1.0在linux下怎么安装

opencv2.1.0在linux下怎么安装,第1张

pkg-config 是一个库文件安装信息管理工具,它可以返回已安装的库文件及其相关头文件的位置信息。安装这个极容易,自己下载安装把。

pkg-config 通过各个库文件的pc 文件识别已安装的库文件的信息,这些pc文件是由各库的安装程序自己生成的,例如ffmpeg 安装程序会在/usr/local/lib/pkgconfig目录下提供libavcodecpc libswscalepc 等5个pc文件,分别对应安装的五个库文件。

但pkg-confg默认只搜索/usr/lib/pkgconfig目录,去寻找pc文件,这里需要添加一个环境变量 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig,使得pkg-config可以找到ffmpeg的安装信息。

三 安装cmake

cmake 是一个跨平台makefile生成工具,是编译新版opencv所必须的工具。

直接下载安装cmake到一个合适的位置,并将cmake安装目录下的bin目录加入PATH环境变量,cmake的使用详见下述说明。

四 安装opencv

1、下载最新版opencv源代码 for linux

2、在源代码目录下 mkdir release && cd release

3、cmake / (重点)

使用cmake 生成编译opecv的Makefile 文件, / 是opencv的源代码目录,里面包含了预置的cmake 配置文件CmakeListstxt。

这里的输出,会显示默认配置下,各模块的检测情况,重点是opencv所需工具库是否被检测到,例如视频编解码库、TBB库等。

查看CmakeListstxt文件可知,cmake使用pkg-config获取所需的库文件的信息,这就是为什么一定要安装pkg-config的原因。

如果你看到FFMPEG及其下各子项的值为1,ok,检测到了,如果为0,核对1、2两步骤,看是否成功安装了ffmpeg,以及pkg-config是否可以检测到ffmpeg:

使用 pkg-config –list-all | grep libavcodec 。

4、 cmkae-gui /

若你想改变opencv的默认编译模式,用cmake的图形模式可以编辑一大堆的编译参数,例如是否支持IPP、TBB等等,这里比较讨厌的是,图形模式下,你看不到选择的模块是否被正确检测到,要再运行 cmake / 查看。

5、 make && make install 默认 opencv将被安装在 /usr/local/ 下。

6、 编辑环境变量 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 以使得系统可以找到opencv的动态链接库。

到这里,opencv安装完毕,并可读写几乎全部常见视频文件,你可以使用g++直接编译你的例程,如果你的pkg-config配置正确,以下指令可以运行 :

g++ -o my_example my_examplecpp `pkg-config opencv --cflags --libs`

pkg-config opencv --cflags –libs 将返回opencv的头文件和库文件的编译参数。

#include "cvh"

#include "highguih"

#include "cxcoreh"

#include "cvcamh"

//图像的像素直接提取

#define _I(img,x,y) ((unsigned char)((img)->imageData + (img)->widthStep(y)))[(x)]

//亚像素级灰度值

#define _IF(image,x,y) ( ((int)(x+1)-(x))((int)(y+1)-(y))_I((image),(int)(x),(int)(y)) + ((int)(x+1)-(x))((y)-(int)(y))_I((image),(int)(x),(int)(y+1)) + ((x)-(int)(x))((int)(y+1)-(y))_I((image),(int)(x+1),(int)(y)) + ((x)-(int)(x))((y)-(int)(y))_I((image),(int)(x+1),(int)(y+1)) )//插值后的像素值(IN表示interpolation),x、y可以为小数

void callback(IplImage image);

void main()

{

int ncams = cvcamGetCamerasCount( );//返回可以访问的摄像头数目

HWND mywin;

cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE);

cvcamSetProperty(0, CVCAM_PROP_RENDER, CVCAMTRUE);

mywin = (HWND)cvGetWindowHandle("cvcam window");

cvcamSetProperty(0, CVCAM_PROP_WINDOW, &mywin);

cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback);

//cvcamGetProperty(0, CVCAM_VIDEOFORMAT,NULL);

cvNamedWindow( "径向矫正1", 1 );//创建窗口

cvNamedWindow( "径向矫正2", 1 );//创建窗口

cvcamInit( );

cvcamStart( );

cvWaitKey(0);

cvcamStop( );

cvcamExit( );

cvDestroyWindow( "径向矫正1" );//销毁窗口

cvDestroyWindow( "径向矫正2" );//销毁窗口

}

void callback(IplImage image)

{

IplImage Show1 = cvCreateImage( cvSize(320,240), IPL_DEPTH_8U, 1);

IplImage Show2 = cvCreateImage( cvSize(420,340), IPL_DEPTH_8U, 1);

IplImage ImageC1 = cvCreateImage( cvSize(320,240), IPL_DEPTH_8U, 1);

//转换为灰度图

cvCvtColor( image, ImageC1, CV_RGB2GRAY);

cvFlip( ImageC1, NULL, 0);

double mi;

double md;

mi = new double[33];

md = new double[4];

CvMat intrinsic_matrix,distortion_coeffs;

//摄像机内参数

cvInitMatHeader(&intrinsic_matrix,3,3,CV_64FC1,mi);

//镜头畸变参数

cvInitMatHeader(&distortion_coeffs,1,4,CV_64FC1,md);

/////////////////////////////////////////////////

////////////////////////////320240 120度广角镜头

//参数由matlab获得

double fc1,fc2,cc1,cc2,kc1,kc2,kc3,kc4;

fc1 = 66723923/25;

fc2 = 66978156/25;

cc1 = 42996933/25;

cc2 = 35148350/25;

kc1 = -040100;

kc2 = 019463;

kc3 = 000508;

kc4 = -000051;

cvmSet(&intrinsic_matrix, 0, 0, fc1);

cvmSet(&intrinsic_matrix, 0, 1, 0);

cvmSet(&intrinsic_matrix, 0, 2, cc1);

cvmSet(&intrinsic_matrix, 1, 0, 0);

cvmSet(&intrinsic_matrix, 1, 1, fc2);

cvmSet(&intrinsic_matrix, 1, 2, cc2);

cvmSet(&intrinsic_matrix, 2, 0, 0);

cvmSet(&intrinsic_matrix, 2, 1, 0);

cvmSet(&intrinsic_matrix, 2, 2, 1);

cvmSet(&distortion_coeffs, 0, 0, kc1);

cvmSet(&distortion_coeffs, 0, 1, kc2);

cvmSet(&distortion_coeffs, 0, 2, kc3);

cvmSet(&distortion_coeffs, 0, 3, kc4);

////////////////////////////320240 120度广角镜头

/////////////////////////////////////////////////

//矫正畸变(opencv)

cvUndistort2( ImageC1, Show1, &intrinsic_matrix, &distortion_coeffs);

//矫正畸变

for (int nx=0; nx<420; nx++)

{

for (int ny=0; ny<340; ny++)

{

double x=nx-50;

double y=ny-50;

double xx=(x-cc1)/fc1;

double yy=(y-cc2)/fc2;

double r2=pow(xx,2)+pow(yy,2);

double r4=pow(r2,2);

double xxx=xx(1+kc1r2+kc2r4)+2kc3xxyy+kc4(r2+2xxxx);

double yyy=yy(1+kc1r2+kc2r4)+2kc4xxyy+kc3(r2+2yyyy);

double xxxx = xxxfc1+cc1;

double yyyy = yyyfc2+cc2;

if (xxxx>0 && xxxx<320 && yyyy>0 && yyyy<240)

{

_I(Show2,nx,ny) = (int)_IF(ImageC1,xxxx,yyyy);

}

else

{

_I(Show2,nx,ny) = 0;

}

}

}

//画线

cvLine( Show1, cvPoint(0,10), cvPoint(320,10), cvScalar(255,255,255),3 );

cvLine( Show1, cvPoint(0,230), cvPoint(320,230), cvScalar(255,255,255),3 );

cvLine( Show1, cvPoint(10,0), cvPoint(10,240), cvScalar(255,255,255),3 );

cvLine( Show1, cvPoint(310,0), cvPoint(310,240), cvScalar(255,255,255),3 );

cvLine( Show1, cvPoint(0,0), cvPoint(320,240), cvScalar(255,255,255),3 );

cvLine( Show1, cvPoint(0,240), cvPoint(320,0), cvScalar(255,255,255),3 );

cvLine( Show1, cvPoint(0,10), cvPoint(320,10), cvScalar(0,0,0) );

cvLine( Show1, cvPoint(0,230), cvPoint(320,230), cvScalar(0,0,0) );

cvLine( Show1, cvPoint(10,0), cvPoint(10,240), cvScalar(0,0,0) );

cvLine( Show1, cvPoint(310,0), cvPoint(310,240), cvScalar(0,0,0) );

cvLine( Show1, cvPoint(0,0), cvPoint(320,240), cvScalar(0,0,0) );

cvLine( Show1, cvPoint(0,240), cvPoint(320,0), cvScalar(0,0,0) );

//显示

cvShowImage("径向矫正1", Show1);

cvShowImage("径向矫正2", Show2);

cvWaitKey(1);

cvReleaseImage( &Show1 );

cvReleaseImage( &Show2 );

cvReleaseImage( &ImageC1 );

}

来自: >

在一个项目中需要用到OpenCV,刚开始使用了OpenCV的动态链接库,这样,在移动可执行程序时还必须将OpenCV动态支持库一起搬移,很是麻烦。所以,最终选择OpenCV静态链接库,这样程序移植运行就方便了很多。

需要编译成静态库以便于应用程序链接。

网上有的教程中写的在VC++2010下安装OpenCV21时用到了TBB库,而我在编译链接自己的程序后需要用到TBBdll。本人设计的目的就是要做一个独立的界面程序,不需要携带其他第三方库。经过一段时间的努力最终找到了编译OpenCV21静态库的方法。

需要的工具环境及文件:

-------------------------------------------------------------------------------------------------------------

1、Windows XP

2、VC++2010(VS2010)

3、为编译OpenCV源码包(我下载的有:OpenCV210,OpenCV230及OpenCV244)

4、CMake289

说明:OpenCV各版本官方下载地址:opencvorg/

cmake-289下载地址:ishareiasksinacomcn/download/explainphpfileid=35025936

--------------------------------------------------------------------------------------------------------------

以OpenCV210编译静态库为例

CMake配置

-------------------------------------------------------------------------------------------------------------

打开CMake并设置:

Where is the rource code :OpenCV源代码所在的文件夹

Where to build the binaries:CMake配置好得到的文件放在位置(我的:E:\OpenCV210-prj)

然后点击configure,选择"Visual Studio 10"。然后确定。

等待configure完成,会出现很多红色的选项,因为主要是生成OpenCV的库,所以只需保留某些选项:

去掉BUILD_NEW_PYTHON_SUPPORT,BUILD_SHARED_LIBS, BUILD_TESTS

勾选OPENCV_BUILD_3RDPARTY_LIBS, WITH_TBB,WITH_JASPER, WITH_JPEG,

WITH_PNG, WITH_TIFF选项,

然后再点击configure,如下图:

提示TBB_INCLUDE_DIR找不到,因为我们不需要TBB库,所以忽略,再一次点击configure。

等待配置完成,最后点击generate,完成后关闭CMake。

-------------------------------------------------------------------------------------------------------------

VC++2010编译静态库

-------------------------------------------------------------------------------------------------------------

进入E:\OpenCV210-prj目录,使用VC++2010打开sln文件,打开项目管理器

这时候会看到

解决方案中有很多小项目存在。

注:这时我们右键任意点击一个子项目(如cv),选择属性,可以在配置属性下的常规项目中看到,配置类型为

静态库(lib)。

按住ctrl键,选中除过ALL_BUILD, INSTALL, ZERO_CHECK,

uninstall四个项目的其他所有项目,在菜单中选择项目->属性,打开配置属性->c/c++->代码生成选项,在右侧窗口中的运行时库中选择多线程调试(/MTd),然后确认。

说明:这里有四个选项(/MT, /MTd, /MD,

/MDd),前两个一组,为静态链接运行时库,运行时不需要运行时库的支持,代码直接插入到程序中去;后两个一组,为动态链接运行时库,运行时需要msvcr90dll或msvcp90dll支持。

我们先编译Debug版的OpenCV静态库,在解决方案"opencv"(22个项目)上单击右键,选择重新生成解决方案,此时便开始编译OpenCV库了,等编译结束会提示完成16个,失败4个:

这四个项目生成的是exe程序,不需要管他们。到这步我们已经生成了Debug版本的静态库!

然后我们用相同的方式生成Release版的库,在之前的基础上只需要将选项选择多线程/MT,再进行编译。编译时警告很多,直接忽略!

注意:/MT即是Release版本,/MTD即是Debug版本。

最终我们需要的静态库就存在:E:\OpenCV210-prj/lib 和 E:\OpenCV210-prj/3rdparty/lib

两个目录,我们编译好的库就在这两个文件夹下。分别

将E:\OpenCV210-prj/3rdparty/lib中Debug

下面的所有文件Copy到E:\OpenCV210-prj/lib中的Debug 文件中。

将E:\OpenCV210-prj/3rdparty/lib中Release下面的所有文件Copy到E:\OpenCV210-prj/lib中的Release文件中。

以上就是关于opencv2.1.0在linux下怎么安装全部的内容,包括:opencv2.1.0在linux下怎么安装、android中如何用opencv处理倾斜校正的问题,求源代码、如何编译 opencv动态链接库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9373952.html

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

发表评论

登录后才能评论

评论列表(0条)

保存