在win和android上同时进行OpenCV程序设计

简介: 基于qt进行Android图像处理项目设计的时候,初期可以首先在windows上进行调试,等到比较成熟后将代码转换到adnroid上。这里仅以widget为例,如果使用qtquick是一样的。具体以下几步:1、项目创建的时候,选择android和desktop两类(前提是安装的时候已经都选择了)这样,在程序设计的过程中,我们就可以通过切换来进行选择如果对于已经配置好kti(构建套件)的项目,可以先删除目录下的.pro.user文件,而后重新打开项目,则自动跳出构建套件配置界面2、配置文件:对配置文件的修改是主要知识点所在,首先在不同平台下,要填写不同的前缀。
基于qt进行Android图像处理项目设计的时候,初期可以首先在windows上进行调试,等到比较成熟后将代码转换到adnroid上。
这里仅以widget为例,如果使用qtquick是一样的。具体以下几步:
1、项目创建的时候,选择android和desktop两类(前提是安装的时候已经都选择了)
img_807a72ed3cb0aa5d8a3e9574d2ea8478.png
这样,在程序设计的过程中,我们就可以通过切换来进行选择
img_0510298241624759d841e15a679c70b6.png
如果对于已经配置好kti(构建套件)的项目,可以先删除目录下的.pro.user文件,而后重新打开项目,则自动跳出构建套件配置界面
img_fc4794655fa096f254915d5fcf6a98fc.png

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请参考博客中其它博文)
img_0a61d44090a0675837543ae0bae04381.png
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、结果和小结
img_04cc6663172582c0e84e00f4eb47a110.png
img_6fbad2e5ec0d0205e357cbee81d26cdf.jpe
在两类平台上进行配置,其原始原因是为了能够加快项目初期,Android+OpenCV处理程序的调试速度,主要的难点在于.pro文件的配置。
在项目实践过程中的如何提高实现速度?我们在后面的文章中继续分享。
感谢阅读至此,希望有所帮助!








目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
5月前
|
测试技术 数据库 Android开发
0008Java安卓程序设计-ssm基于Android平台的健康管理系统
0008Java安卓程序设计-ssm基于Android平台的健康管理系统
27 0
|
5月前
|
Java 数据库 Android开发
0007Java安卓程序设计-ssm基于Android的校园新闻管理系统
0007Java安卓程序设计-ssm基于Android的校园新闻管理系统
30 0
|
5月前
|
关系型数据库 MySQL Android开发
0006Java安卓程序设计-ssm基于Android的校园二手商品交易平台1
0006Java安卓程序设计-ssm基于Android的校园二手商品交易平台
38 0
|
5月前
|
Java 应用服务中间件 数据库
0004Java安卓程序设计-springboot基于APP的鲜花商城
0004Java安卓程序设计-springboot基于APP的鲜花商城
46 0
|
5月前
|
开发工具 数据库 Android开发
0001Java安卓程序设计-基于Android多餐厅点餐桌号后厨前台服务设计与开发2
0001Java安卓程序设计-基于Android多餐厅点餐桌号后厨前台服务设计与开发
28 0
|
5月前
|
Java 数据库 Android开发
0003Java安卓程序设计-springboot基于Android的学习生活交流APP
0003Java安卓程序设计-springboot基于Android的学习生活交流APP
33 0
|
5月前
|
Java 关系型数据库 MySQL
0002Java安卓程序设计-基于Uniapp+springboot菜谱美食饮食健康管理App2
0002Java安卓程序设计-基于Uniapp+springboot菜谱美食饮食健康管理App
33 0
|
6月前
|
存储 传感器 定位技术
《移动互联网技术》 第四章 移动应用开发: Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序
《移动互联网技术》 第四章 移动应用开发: Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序
67 0
|
6月前
|
Java Android开发 开发者
1024程序节|Android框架之一 BRVAH【BaseRecyclerViewAdapterHelper】使用demo
BRVAH是一个强大的RecyclerAdapter框架(什么是RecyclerView?),它能节约开发者大量的开发时间,集成了大部分列表常用需求解决方案。为什么会有它?请查看「Android开源框架BRVAH由来篇」该框架于2016年4月10号发布的第1个版本到现在已经一年多了,经历了800多次代码提交,140多次版本打包,修复了1000多个问题,获得了9000多star,非常感谢大家的使用以及反馈。
141 0
|
5月前
|
Android开发
0002Java安卓程序设计-基于Uniapp+springboot菜谱美食饮食健康管理App1
0002Java安卓程序设计-基于Uniapp+springboot菜谱美食饮食健康管理App
61 0