Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Create an account
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
semicon_lab.jpg

Hướng dẫn cài đặt OpenCV trên KIT

E-mail Print PDF

1. Mục đích

Cài đặt và sử dụng thư viện OpenCV trên KIT FriendlyArm 2440. Bài viết này hướng dẫn:

- Cài đặt, cấu hình OpenCV trên KIT FriendlyARM 2440

- Viết ứng dụng Qt sử dụng thư viện OpenCV biên dịch chạy trên Linux host và trên KIT ARM Linux.

2. Yêu cầu

- PC cài đặt Ubuntu (10.4) dùng làm máy phát triển (Linux host)

- KIT FriendlyARM Mini/Macro2440 đã cài đặt Linux Embedded OS

- Compile source:

            + Trình biên dịch chéo arm-linux-gcc (4.3.3)

            + Mã nguồn OpenCV (Hướng dẫn này sử dụng phiên bản OpenCV 2.0.0 cho KIT ARM Linux)

3. Nội dung tiến hành

3.1. Cài đặt và cấu hình OpenCV trên KIT ARM Linux

Chú ý: Chuyển sang quyền root để thực hiện cài đặt

3.1.1. Download file OpenCV 2.0.0 tar.gz 

http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.0/

- Giải nén, chứa trong thư mục OpenCV-2.0.0

3.1.2. Tạo thư mục chứa cài đặt OpenCV for ARM, để trong /opt

mkdir /opt/opencv.arm


3.1.3. Cấu hình OpenCV for ARM.

cd OpenCV-2.0.0

./configure --host=arm-linux --without-gtk --without-gthread --without-ffmpeg --without-python --enable-shared --prefix=/opt/opencv.arm

 

Description of the above command -

–host=arm-linux – This links ARM Linux GCC with OpenCV and cross-compiles the OpenCV codes for ARM target.

–without-gtk –without-gthread –without-ffmpeg –without-python – Here we remove the libraries we won’t be requiring on our target. Mainly to save space.  

GTK is for GUI, Gthread is used for thread handling and management, ffmpeg is used for video. You can include these libraries if you need them.

3.1.4. Sau khi cấu hình thành công, thực hiện lệnh make

make


(tip: Sử dụng make –j4 hỗ trợ biên dịch multicore để biên dịch nhanh hơn)

3.1.5. Cài đặt với quyền root (sudo)

make install


Sau khi cài đặt thành công, thư mục cài đặt /opt/opencv.arm chứa 4 thư mục  bin, include, lib, share. Thư mục lib chứa các files libcv.a, libcvaux.a, 

libcxcore.a, libhighgui.a, libml.alibcv.so.1.0.0, libcvaux.so.1.0.0, libcxcore.so.1.0.0, libhighgui.so.1.0.0, libml.so.1.0.0 

3.1.6. Copy thư viện OpenCV lên KIT

KIT FriendlyARM Mini/Macro2440

OS : Qtopia

Kết nối, telnet vào KIT.

Kiểm tra thư mục /usr trên KIT, tạo 2 thư mục sau nếu chưa có.

mkdir /usr/include
mkdir /usr/lib

Sử dụng gFTP truyền các file thư viện OpenCV for Arm đã cài đặt xuống KIT

/opt/opencv.arm/include/opencv of host to /usr/include of target

/opt/opencv.arm/lib of host to /usr/lib of target

- Copy file libgomp.so.1 va libgomp.so.1.0.0 từ trong bộ cài arm-linux-gcc (Thư mục /opt/FriendlyArm/toolschain/4.4.3/bin/arm-none-linux-gnueabi/sys-root/lib)  

xuống thư mục /usr/lib tren KIT. Thư viện này cho phép chạy các ứng dụng có hỗ trợ multicore

- Quá trình cài đặt OpenCV cho KIT hoàn tất.


3.2. Viết ứng dụng Qt sử dụng thư viện OpenCV

Mục đích:

- Demo thư viện OpenCV đã cài đặt bằng một ví dụ Qt đơn giản, cấu hình để ứng dụng biên dịch chạy trên máy tính Linux và trên KIT arm.

- Ứng dụng thực hiện khai báo (include) thư viện OpenCV và thử nghiệm gọi hàm mở file ảnh

3.2.1. Cấu hình ứng dụng chạy trên máy tính Linux

Trong file .pro thêm 2 dòng lệnh sau:

INCLUDEPATH += /usr/local/include/opencv
LIBS +=/usr/local/lib/*.so

Include thư viện trong file cần thiết:

#include <opencv/cv.h>       //Thư viện chứa các hàm và thuật toán xử lý ảnh cơ bản + nâng cao

#include <opencv/highgui.h>  //Thư viện chứa các hàm xử lý load/store images/video

Ví dụ gọi hàm đọc 1 file ảnh

    IplImage* img = cvLoadImage(“tenfileanh”);

- Cấu hình để biên dịch ứng dụng Qt chạy trên host Linux

3.2.2. Cấu hình ứng dụng chạy trên KIT arm

Trong file .pro thêm 2 dòng lệnh sau

INCLUDEPATH += /opt/opencv.arm/include/opencv
LIBS +=/opt/opencv.arm/lib/*.so

Include thư viện trong file cần thiết:

#include <cv.h>       //Thư viện chứa các hàm và thuật toán xử lý ảnh cơ bản + nâng cao

#include <highgui.h>  //Thư viện chứa các hàm xử lý load/store images/video

- Gọi các hàm xử lý của thư viện OpenCV cung cấp

- Cấu hình để biên dịch ứng dụng chạy trên KIT arm.


Ví dụ: Chương trình Qt sử dụng thư viện OpenCV (ShowImage)

1. Create a new Qt GUI Application project.

2. Add a new Label and Push Button in the form.

3. Do the rest with writing the program:

main.cpp:

#include <QtGui/QApplication>

#include "mainwindow.h"

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

{

    QApplication a(argc, argv);

    MainWindow w;

    w.show();

    return a.exec();

}

 mainwindow.h:

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include <opencv/cv.h>

#include <opencv/highgui.h>

#include <QFileDialog>

namespace Ui {

    class MainWindow;

}

class MainWindow : public QMainWindow {

    Q_OBJECT

public:

    MainWindow(QWidget *parent = 0);

    ~MainWindow();

protected:

    void changeEvent(QEvent *e);

    QString     FileOpName; //declare FileOpName as IplImage

    IplImage*   imagerd; //declare imagerd as IplImage

private slots:

    void on_pushButton_clicked();

    void openImage(); //add a new openImage function to the project

private:

    Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QFileDialog>

#include <QMessageBox>

#include <opencv/cv.h>

#include <opencv/highgui.h>

#include <QPixmap>

#include <QString>

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui-­>setupUi(this);

}

MainWindow::~MainWindow()

{

    delete ui;

}

//Open image function call

void MainWindow::openImage()

{

    //declare FileOpName as the choosen opened file name

    FileOpName = QFileDialog::getOpenFileName(this,

                                    tr("Open File"), QDir::currentPath(),tr("Image Files (*.png *.jpg *.jpeg 

*.bmp)"));

    //Check if FileOpName exist or not

    if (!FileOpName.isEmpty()) {

        QImage image(FileOpName);

        if (image.isNull()) {

            QMessageBox::information(this, tr("Face Recognition"),

                                     tr("Cannot load %1.").arg(FileOpName));

            return;

        }

    }

    //function to load the image whenever fName is not empty

        if( FileOpName.size() ){

        imagerd = cvLoadImage(FileOpName.toAscii().data());

        QImage imageView = QImage((const unsigned char*)(imagerd­->imageData),

 imagerd­->width, imagerd-­>height,QImage::Format_RGB888).rgbSwapped();

        ui-­>label-­>setPixmap(QPixmap::fromImage(imageView));

        }

}

void MainWindow::changeEvent(QEvent *e)

{

    QMainWindow::changeEvent(e);

    switch (e-­>type()) {

    case QEvent::LanguageChange:

        ui-­>retranslateUi(this);

        break;

    default:

        break;

    }

}

void MainWindow::on_pushButton_clicked()

{

    openImage();

}



 

Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn

đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON

  HotLine: 0972 800 931 Ms Duyên

 

Last Updated ( Tuesday, 03 November 2015 17:22 )  

Related Articles

Chat Zalo