Sunday, October 4, 2015

1. OpenCV examples for host
Install GTK

yum install gtk2-devel

DisplayImage.cpp (using OpenCV-2.3.1)
 #include <stdio.h>  
 #include <opencv2/opencv.hpp>  
   
 using namespace cv;  
   
 int main(int argc, char** argv )  
 {  
   if ( argc != 2 )  
   {  
     printf("usage: DisplayImage.out <Image_Path>\n");  
     return -1;  
   }  
   
   Mat image;  
   image = imread( argv[1], 1 );  
   
   if ( !image.data )  
   {  
     printf("No image data \n");  
     return -1;  
   }  
   namedWindow("Display Image", CV_WINDOW_AUTOSIZE );  
   imshow("Display Image", image);  
   
   waitKey(0);  
   
   return 0;  
 }  
   


Build application
 export OPENCV_DIR=/home/usr/local
 export PATH=$PATH:${OPENCV_DIR}/bin  
 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${OPENCV_DIR}/lib/pkgconfig 
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${OPENCV_DIR}/lib  
   
 g++ `pkg-config --cflags opencv` `pkg-config --libs opencv` DisplayImage.cpp -o DisplayImage  
   

FromId3.jpg



Execute
 [ninhld@localhost ex]$   
 [ninhld@localhost ex]$ export OPENCV_DIR=/home/usr/local    
 [ninhld@localhost ex]$ export PATH=$PATH:${OPENCV_DIR}/bin  
 [ninhld@localhost ex]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${OPENCV_DIR}/lib  
 [ninhld@localhost ex]$     
 [ninhld@localhost ex]$ ./DisplayImage FromId3.jpg   
   

Kết quả


2. OpenCV examples for board 
Khi chạy trên host dùng GTK hoặc QT làm chương trình quản lý cửa sổ đều được.
Khi chạy trên board chỉ dùng được QT làm chương trình quản lý cửa sổ, GTK không được hỗ trợ trên các thiết bị nhúng.
Vì thế để chạy được các ví dụ dưới đây chúng ta cần có bộ thư viện QT được build sẵn cho board, xem các build tại đây.

- Tạo một QT project với một Button và một Label

- Mở file .pro và thêm hai dòng khai báo đến thư viện opencv đã installed
 INCLUDEPATH += /friendlyarm/include  
 LIBS +=/friendlyarm/lib/*.so  

- Tạo sự kiện cho button
  Right click on button > Go to slot ... > clicked( ) > OK

- 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:  
   explicit MainWindow(QWidget *parent = 0);  
   ~MainWindow();  
   
 protected:  
   IplImage*  imagerd; //declare imagerd as IplImage  
   
 private slots:  
   void on_OpenImage_clicked();  
   
 private:  
   Ui::MainWindow *ui;  
 };  
   
 #endif // MAINWINDOW_H  
   

- mainwindow.cpp
 #include "mainwindow.h"  
 #include "ui_mainwindow.h"  
   
 #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;  
 }  
   
 void MainWindow::on_OpenImage_clicked()  
 {  
   imagerd = cvLoadImage("FromId3.jpg");  
   
   QImage imageView = QImage((const unsigned char*)(imagerd->imageData),  
                imagerd->width,  
                imagerd->height,  
                QImage::Format_RGB888).rgbSwapped();  
   
   ui->myimage->setPixmap(QPixmap::fromImage(imageView));  
 }  
   

- Qmake and build
 $ export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin   
 $ export QMAKESPEC=/path/qt-everywhere-opensource-src-4.7.2/mkspecs/qws/linux-arm-g++   
 $ cd /home/ninhld/Documents/OpenCV_Helloworld  
 $ /friendlyarm/bin/qmake   
 $ make  

- Copy toàn bộ thư viện QT, OpenCV, chương trình OpenCV_Helloworld và file ảnh FromId3.jpg xuống board (sdcard or mount NFS)
- Trên terminal minicom export biến môi trường đến thư viện QT và OpenCV
 DEPEND_LIB_DIR=/friendlyarm  
 export CFLAGS=-I${DEPEND_LIB_DIR}/include   
 export CPPFLAGS=-I${DEPEND_LIB_DIR}/include   
 export LDFLAGS=-L${DEPEND_LIB_DIR}/lib   
 export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig   
 export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib   
 export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin  

- Chạy ví dụ
 $ ./OpenCV_Helloworld -qws  





Download chương trình tại đây.

Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Lập trình hệ thống nhúng Linux . Powered by Luong Duy Ninh -