基于qml创建最简单的图像处理程序(3)-使用opencv&qml进行图像处理

简介: 《基于qml创建最简单的图像处理程序》系列课程及配套代码基于qml创建最简单的图像处理程序(1)-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/8343310.html课程1附件https://files.

《基于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才得到的结果。那么这样一个框架就建立了。感谢阅读至此!希望有所帮助

 

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
3月前
|
openCL 开发工具 C语言
OpenCV 图像处理学习手册:6~7
OpenCV 图像处理学习手册:6~7
69 0
|
3月前
|
存储 编解码 算法
OpenCV 图像处理学习手册:1~5
OpenCV 图像处理学习手册:1~5
28 0
|
6月前
|
算法 C++ 计算机视觉
OpenCV-图像像素遍历操作的三种方法对比(程序提速)
OpenCV-图像像素遍历操作的三种方法对比(程序提速)
|
2月前
|
人工智能 Linux API
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
42 0
|
4月前
|
算法 API 计算机视觉
OpenCV(图像处理)-基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算
1. 形态学 OpenCV形态学是一种基于OpenCV库的数字图像处理技术,主要用于处理图像的形状、结构和空间关系。它包括一系列图像处理工具和算法,包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽等。
58 0
|
4月前
|
缓存 算法 计算机视觉
OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG
1.概念介绍 视频背景扣除原理:视频是一组连续的帧(一幅幅图组成),帧与帧之间关系密切(GOP/group of picture),在GOP中,背景几乎是不变的,变的永远是前景。
84 0
|
2月前
|
编解码 算法 自动驾驶
探索OpenCV:图像处理的利器
探索OpenCV:图像处理的利器
30 0
|
4月前
|
机器学习/深度学习 并行计算 算法
OpenCV简介、导入及图像处理基础方法讲解(图文解释 附源码)
OpenCV简介、导入及图像处理基础方法讲解(图文解释 附源码)
46 0
|
4月前
|
算法 计算机视觉
OpenCV图像处理-图像分割-MeanShift
1. 基本概念 MeanShift严格说来并不是用来对图像进行分割的,而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉面积较小的的颜色区域,它以图像上任意一点P为圆心,半径为sp,色彩幅值为sr进行不断地迭代。
59 0
|
4月前
|
算法 计算机视觉
OpenCV4图像处理-图像交互式分割-GrabCut
1.理论介绍 用户指定前景的大体区域,剩下为背景区域,还可以明确指出某些地方为前景或者背景,GrabCut算法采用分段迭代的方法分析前景物体形成模型树,最后根据权重决定某个像素是前景还是背景。
23 0