基於qml創建最簡單的圖像處理程序(3)-使用opencv&qml進行圖像處理


《基於qml創建最簡單的圖像處理程序》系列課程及配套代碼
基於qml創建最簡單的圖像處理程序(1)-基於qml創建界面
http://www.cnblogs.com/jsxyhelu/p/8343310.html
課程1附件
https://files.cnblogs.com/files/jsxyhelu/%E9%98%B6%E6%AE%B5%E4%BB%A3%E7%A0%811.zip
基於qml創建最簡單的圖像處理程序(2)-使用c++&qml進行圖像處理
http://www.cnblogs.com/jsxyhelu/p/8361441.html
課程2附件
https://files.cnblogs.com/files/jsxyhelu/%E9%98%B6%E6%AE%B5%E4%BB%A3%E7%A0%812.zip
基於qml創建最簡單的圖像處理程序(3)-使用opencv&qml進行圖像處理
http://www.cnblogs.com/jsxyhelu/p/8361443.html
課程3附件
https://files.cnblogs.com/files/jsxyhelu/%E9%98%B6%E6%AE%B5%E4%BB%A3%E7%A0%813.zip

    在qml的系統中引入OpenCV,最復雜的地方在於環境的配置—一旦錯誤,系統即使能夠編譯成功,但是也會在啟動的閃退;本文主要就是講解在qml的系統(目標平台為Android,編碼平台為windows)中如何正確配置OpenCV環境,並且將(2)中的圖像處理結果進一步修改成為使用OpenCV來進行圖像處理的結果;對於QT來說,實際上說的就是如何配置.pro文件。

 
一、環境配置,可以參考:
QT += quick
CONFIG += c ++ 11

android {
message("Using android configuration")
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 \
    imageProcessor.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 += \
    imageProcessor.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
 
 
其中標紅加粗的兩個地方,是尤其需要注意進行修改的地方,分別對於
配置環境變量,當然你要根據你實際的地址來修改
ANDROID_OPENCV = D:/OpenCV-android-sdk/sdk/native
配置InClude地址
INCLUDEPATH += \
$$ANDROID_OPENCV/jni/include/opencv    \
$$ANDROID_OPENCV/jni/include/opencv2    \
$$ANDROID_OPENCV/jni/include            \
配置Libs地址
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
尤其需要注意,這個順序不能夠錯。
最后,還要將libopencv_java3.so當都付到.apk文件中
contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
    ANDROID_EXTRA_LIBS = \
        D:/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_java3.so
 
二、引入頭文件和命名空間,修改算法函數:
直接在頭文件中引入頭文件,並且表明命名空間
# ifndef IMAGEPROCESSOR_H
# define IMAGEPROCESSOR_H
# include <QObject >
# include <QString >
# include <opencv2 /core /core.hpp >
# include <opencv2 /highgui /highgui.hpp >
# include <opencv2 /imgproc /imgproc.hpp >
using namespace cv;
using namespace std;
 
按照前文所說,修改相關算法函數。因為本來函數都是以路徑作為輸入輸出的,所以這里的操作比較簡單。這里得到的算法名稱可能和實際不一致,問題不大:
 
//具體的圖像處理算法,注意圖片處理的結果直接保存到了destFile中去//
static  void _gray(QString sourceFile, QString destFile)
{
    Mat src  = imread(sourceFile.toStdString());
    cv : :cvtColor(src,src,COLOR_BGR2GRAY);
    imwrite(destFile.toStdString(),src);
}

static  void _binarize(QString sourceFile, QString destFile)
{
    Mat src  = imread(sourceFile.toStdString());
    cv : :cvtColor(src,src,COLOR_BGR2GRAY);
    threshold(src,src, 100, 255,THRESH_OTSU);
    imwrite(destFile.toStdString(),src);
}


static  void _emboss(QString sourceFile, QString destFile)
{
    Mat src  = imread(sourceFile.toStdString());
    cv : :cvtColor(src,src,COLOR_BGR2GRAY);
     int thresh  =  100;
    Canny( src, src, thresh, thresh * 23 );
    imwrite(destFile.toStdString(),src);
}
//END 具體的圖像處理算法,注意圖片處理的結果直接保存到了destFile中去//
 
這里得到的就是一個canny的效果,也是通過調用OpenCV才得到的結果。那么這樣一個框架就建立了。感謝閱讀至此!希望有所幫助

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM