linux下编译安装libjpeg与opencv1.0

Opencv1.0OpenCV最基础的版本,编译后的库文件最小,利于后续嵌入式移植,本博文主要为后续的OpenCV1.0交叉编译做准备。

安装编译opencv的依赖包

sudo apt-get install libgtk2.0-dev pkg-config

无法显示摄像头采集到的视频,可能是因为没有安装libgtk2.0-devpkg-config

opencv中与图像显示相关的函数是基于libgtk2.0-devpkg-config用于组织编译后的opencv头文件与库文件等信息。

 

1.1编译与安装libjpeg(jpegsrc.v6b.tar)

#./configure --enable-shared --enable-static --prefix=/usr/local/libjpeg

#make

#make install

 

编译过程问题:

/usr/bin/install -c -m 644 ./cjpeg.1 /home/zz/jpeg-6b/jpeg/man/man1/cjpeg.1

/usr/bin/install: 无法创建一般文件‘/home/zz/jpeg-6b/jpeg/man/man1/cjpeg.1: 没有那个文件或目录

make: *** [install] Error 1

 

首先要 在你安装的目录下建立4个文件目录:/bin/include/lib/man/man1。如果你没有建立这4个文件目录的话,在make install的时候你会遇到上面的问题。

 

1.2编译与安装opencv1.0

#./configure --prefix=/usr/local/opencv

#make

#make install

 

编译过程问题:

1../../cxcore/include/cxmisc.h:133:6: error: #elif with no expression

修改  cxmisc.h  133行  #elif   #else.

2

../../../otherlibs/highgui/.libs/libhighgui.so: undefined reference to `cvCaptureFromCAM_V4L(int)'

 

T添加 #define HAVE_CAMV4L cvconfig.h  24 in

3

cvcap_v4l.cpp:208:28: fatal error: linux/videodev.h: No such file or directory

 

install libv4l-dev and link to it with the following commands:

sudo apt-get install libv4l-dev

sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h

 

1.3测试范例

#include "cv.h"
#include "highgui.h" 
 
#include <stdio.h> 
#include <stdlib.h>
#include <string.h> 
#include <assert.h> 
#include <math.h> 
#include <float.h> 
#include <limits.h> 
#include <time.h> 
#include <ctype.h>  
 
#ifdef _EiC 
#define WIN32 
#endif 
 
static CvMemStorage* storage = 0; 
static CvHaarClassifierCascade* cascade = 0;  
 
void detect_and_draw( IplImage* image ); 
 
int main( int argc, char** argv )
{ 
    IplImage *frame, *frame_copy = 0;
 
 
 
const char* cascade_name;
 
cascade_name = argv[1];
 
    const char* input_name;
 
input_name = argv[2];
if(cascade_name)
{
printf("cascade_name:%s\n", cascade_name);
}
else
{
printf("cascade_name:NULL\n");
}
if(input_name)
{
printf("%s\n", input_name);
}
else
{
printf("input_name:lena.jpg\n");
}
 
    cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
 
    if( !cascade ){ 
        return -1; 
    }
 
    storage = cvCreateMemStorage(0); 
 
    cvNamedWindow( "result", 1 );
 
const char* filename = input_name ? input_name : (char*)"lena.jpg"; 
IplImage* image = cvLoadImage( filename, 1 ); 
 
if( image )
{
    detect_and_draw( image );
    cvWaitKey(0);
    cvReleaseImage( &image );
}
  cvDestroyWindow("result");
  return 0;
}
 
void detect_and_draw( IplImage* img )
{
     static CvScalar colors[] =
    {
 
        {{0,0,255}},
        {{0,128,255}},
        {{0,255,255}},
        {{0,255,0}},
        {{255,128,0}},
        {{255,255,0}},
        {{255,0,0}},
        {{255,0,255}}
    };

    double scale = 1.3; 
    IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 ); 
    IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale), 
                         cvRound (img->height/scale)), 
                     8, 1 ); 
    int i; 
 
    cvCvtColor( img, gray, CV_BGR2GRAY ); 
    cvResize( gray, small_img, CV_INTER_LINEAR );
    cvEqualizeHist( small_img, small_img ); 
    cvClearMemStorage( storage );

    if( cascade )
    { 
        double t = (double)cvGetTickCount();
        CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,
                                             1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/, 
                                            cvSize(30, 30) ); 
        t = (double)cvGetTickCount() - t;
        printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) ); 
        for( i = 0; i < (faces ? faces->total : 0); i++ ) 
        { 
            CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); 
            CvPoint center; 
            int radius; 
            center.x = cvRound((r->x + r->width*0.5)*scale); 
            center.y = cvRound((r->y + r->height*0.5)*scale); 
            radius = cvRound((r->width + r->height)*0.25*scale); 
            cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
        }
    }
    cvShowImage( "result", img );
    cvReleaseImage( &gray );
    cvReleaseImage( &small_img ); 
}

 


 

 

 

以下是在Linux编译安装OpenCV-Python的步骤: 1. 安装依赖项 在终端中输入以下命令安装OpenCV-Python所需的所有依赖项: ``` sudo apt-get update sudo apt-get install build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev \ libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev \ python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev ``` 2. 下载OpenCV源代码 从OpenCV的官方网站(https://opencv.org/releases/)下载最新版本的源代码,并将其解压缩到您的系统中: ``` wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip unzip opencv.zip ``` 3. 下载OpenCV-contrib源代码 从OpenCV的官方网站(https://opencv.org/releases/)下载最新版本的OpenCV-contrib源代码,并将其解压缩到您的系统中: ``` wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/master.zip unzip opencv_contrib.zip ``` 4. 编译OpenCV 在终端中进入OpenCV源代码目录并创建一个新的构建目录: ``` cd opencv-master mkdir build cd build ``` 使用cmake配置OpenCV的构建选项: ``` cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=OFF \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-master/modules \ -D BUILD_EXAMPLES=ON .. ``` 请注意,上面的命令中的OPENCV_EXTRA_MODULES_PATH参数指定了OpenCV-contrib源代码目录中的modules子目录。 接下来,使用以下命令编译OpenCV: ``` make -j4 ``` 请注意,上面的命令中的-j参数指定了使用多少个CPU核心进行编译。 最后,使用以下命令安装OpenCV: ``` sudo make install ``` 5. 安装OpenCV-Python 在终端中输入以下命令安装OpenCV-Python: ``` sudo apt-get install python3-opencv ``` 6. 测试OpenCV-Python 打开Python解释器并导入OpenCV模块: ``` import cv2 ``` 如果没有任何错误消息,则说明OpenCV-Python已成功安装
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值