在win和android上同時進行OpenCV程式設計

來源:互聯網
上載者:User

標籤:compiler   ons   wrapper   def   int   designer   depend   方法   nat   

基於qt進行Android影像處理項目設計的時候,初期可以首先在windows上進行調試,等到比較成熟後將代碼轉換到adnroid上。這裡僅以widget為例,如果使用qtquick是一樣的。具體以下幾步: 1、項目建立的時候,選擇android和desktop兩類(前提是安裝的時候已經都選擇了)這樣,在程式設計的過程中,我們就可以通過切換來進行選擇如果對於已經配置好kti(構建套件)的項目,可以先刪除目錄下的.pro.user檔案,而後重新開啟項目,則自動跳出構建套件配置介面
2、設定檔:對設定檔的修改是主要知識點所在,首先在不同平台下,要填寫不同的首碼。對於pc平台是 win32 {……}對於Android平台是 android {……}大小寫不可寫錯,此外就是OpenCV基礎環境的配置。對於pc平台需要做的是配置系統路徑、設定include和lib路徑;對於Android平台需要做的是設定include和lib路徑,並且將libopencv_java3.so拷貝到最後的.apk中去。參考的設定檔如下,其中重要的部分已經加粗。 QT += quick
QT += multimedia
CONFIG += c++11

win32 {
message("當前使用PC配置")
WIN32_OPENCV = D:/JsxyheluOpenCV/New-QT-dll/install
INCLUDEPATH += \
$$WIN32_OPENCV/include/opencv \
$$WIN32_OPENCV/include/opencv2 \
$$WIN32_OPENCV/include
LIBS += \
$$WIN32_OPENCV/x86/mingw/lib/
libopencv_core320.dll.a\$$WIN32_OPENCV/x86/mingw/lib/libopencv_highgui320.dll.a\
$$WIN32_OPENCV/x86/mingw/lib/libopencv_imgproc320.dll.a\
$$WIN32_OPENCV/x86/mingw/lib/libopencv_imgcodecs320.dll.a\
$$WIN32_OPENCV/x86/mingw/lib/libopencv_highgui320.dll.a\
$$WIN32_OPENCV/x86/mingw/lib/libopencv_videoio320.dll.a
}

android {
message("當前使用Android配置")
ANDROID_OPENCV = D:/OpenCV-android-sdk/sdk/native
INCLUDEPATH += \
$$ANDROID_OPENCV/jni/include/opencv \
$$ANDROID_OPENCV/jni/include/opencv2 \
$$ANDROID_OPENCV/jni/include \
LIBS += \
$$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_ml.a \
$$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_objdetect.a \
$$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_calib3d.a \
$$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_video.a \
$$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_features2d.a \
$$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_highgui.a \
$$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_flann.a \
$$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_imgproc.a \
$$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_core.a \
$$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/liblibjpeg.a \
$$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/liblibpng.a \
$$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/liblibtiff.a \
$$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/liblibjasper.a \
$$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/libtbb.a \
$$ANDROID_OPENCV/3rdparty/libs/armeabi-v7a/libtegra_hal.a \
$$ANDROID_OPENCV/libs/armeabi-v7a/libopencv_java3.so
}

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

SOURCES += main.cpp \
todocpp.cpp \
calibration.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator‘s code model
QML_IMPORT_PATH =

# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

HEADERS += \
todocpp.h \
calibration.h

DISTFILES += \
android/AndroidManifest.xml \
android/gradle/wrapper/gradle-wrapper.jar \
android/gradlew \
android/res/values/libs.xml \
android/build.gradle \
android/gradle/wrapper/gradle-wrapper.properties \
android/gradlew.bat 

contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
ANDROID_EXTRA_LIBS = \
D:/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_java3.so
}

ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android

並設定正確的環境變數(如何在Windows和Android平台下編譯OpenCV請參考部落格中其它博文) 3、編寫介面和代碼為說明方便,在簡單的widget上面顯示一個自己產生的圓。其中圓的產生和最終顯示都調用OpenCV代碼。那麼如果這個是成功的,則證明OpenCV環境配置正確。 #include "mainwindow.h"
#include "ui_mainwindow.h"
using namespace cv;
Mat tmp;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_pressed()
{
    Mat src(Size(640,480),CV_8UC1,cv::Scalar(255));
    circle(src,Point(100,100),100,Scalar(0),-1);
    // 格式轉換
    QPixmap qpixmap = Mat2QImage(src);
    // 將圖片顯示到label上
    ui->label->setPixmap(qpixmap);
}

//格式轉換
QPixmap Mat2QImage(Mat src)
{
    QImage img;
    //根據QT的顯示方法進行轉換
    if(src.channels() == 3)
    {
        cvtColor( src, tmp, CV_BGR2RGB );
        img = QImage( (const unsigned char*)(tmp.data), tmp.cols, tmp.rows, QImage::Format_RGB888 );
    }
    else
    {
        img = QImage( (const unsigned char*)(src.data), src.cols, src.rows, QImage::Format_Grayscale8 );
    }
    QPixmap qimg = QPixmap::fromImage(img) ;
    return qimg;
}
4、結果和小結在兩類平台上進行配置,其原始原因是為了能夠加快項目初期,Android+OpenCV處理常式的調試速度,主要的痛點在於.pro檔案的配置。在項目實踐過程中的如何提高實現速度?我們在後面的文章中繼續分享。感謝閱讀至此,希望有所協助!





來自為知筆記(Wiz)

在win和android上同時進行OpenCV程式設計

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.