当前位置: 首页 > news >正文

网站建设赚钱项目开封网站建设培训

网站建设赚钱项目,开封网站建设培训,科技布沙发优缺点,店面设计餐饮风格目录 一、qt_ui创建 1.1 ui设置 1.2 ui及代码输出保存 二、创建工程 2.1 工程目录及编译设置 2.2 源码设计 三、编译及测试 3.1 程序编译 3.2 程序运行 首先声明#xff0c;这是一个OpenCV 3学习文档的案例#xff0c;但是说明有些过于省略#xff0c;只有一些简短的代码…目录 一、qt_ui创建 1.1 ui设置 1.2 ui及代码输出保存 二、创建工程 2.1 工程目录及编译设置 2.2 源码设计 三、编译及测试 3.1 程序编译 3.2 程序运行 首先声明这是一个OpenCV 3学习文档的案例但是说明有些过于省略只有一些简短的代码描述本人在学习验证过程中将其记录下来分享给大家。 一、qt_ui创建 1.1 ui设置 本文采用qt5.8_msvc2015_64版本 进入qt的bin目录打开qt_ui设计工具designer.exe 创建一个Widget窗体即对象QWidget命名为QMoviePlayer。 随后创建一个QFrame对象对象名为frame该对象可以随意在窗体QMoviePlayer拉出一个合适的长宽比显示框该显示框用来显示视频使用。 完成设置后保存该UI例如QMoviePlayer.ui 1.2 ui及代码输出保存 本人的QMoviePlayer.ui文件的xml内容如下 ?xml version1.0 encodingUTF-8? ui version4.0classQMoviePlayer/classwidget classQWidget nameQMoviePlayerproperty namegeometryrectx0/xy0/ywidth600/widthheight303/height/rect/propertyproperty namewindowTitlestringForm/string/propertywidget classQFrame nameframeproperty namegeometryrectx0/xy0/ywidth601/widthheight241/height/rect/propertyproperty nameframeShapeenumQFrame::StyledPanel/enum/propertyproperty nameframeShadowenumQFrame::Raised/enum/property/widget/widgetresources/connections/ /ui点击窗体菜单进入查看代码保存该代码文件为ui_QMoviePlayer.h或新创建一个头文件将该内容直接复制到头文件中保存。 本人的ui_QMoviePlayer.h的代码内容如下。 /******************************************************************************** ** Form generated from reading UI file QMoviePlayerp15136.ui ** ** Created by: Qt User Interface Compiler version 5.8.0 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/#ifndef QMOVIEPLAYERP15136_H #define QMOVIEPLAYERP15136_H#include QtCore/QVariant #include QtWidgets/QAction #include QtWidgets/QApplication #include QtWidgets/QButtonGroup #include QtWidgets/QFrame #include QtWidgets/QHeaderView #include QtWidgets/QWidgetQT_BEGIN_NAMESPACEclass Ui_QMoviePlayer { public:QFrame *frame;void setupUi(QWidget *QMoviePlayer){if (QMoviePlayer-objectName().isEmpty())QMoviePlayer-setObjectName(QStringLiteral(QMoviePlayer));QMoviePlayer-resize(600, 303);frame new QFrame(QMoviePlayer);frame-setObjectName(QStringLiteral(frame));frame-setGeometry(QRect(0, 0, 601, 241));frame-setFrameShape(QFrame::StyledPanel);frame-setFrameShadow(QFrame::Raised);retranslateUi(QMoviePlayer);QMetaObject::connectSlotsByName(QMoviePlayer);} // setupUivoid retranslateUi(QWidget *QMoviePlayer){QMoviePlayer-setWindowTitle(QApplication::translate(QMoviePlayer, Form, Q_NULLPTR));} // retranslateUi};namespace Ui {class QMoviePlayer: public Ui_QMoviePlayer {}; } // namespace UiQT_END_NAMESPACE#endif // QMOVIEPLAYERP15136_H二、创建工程 2.1 工程目录及编译设置 创建一个opencv_qt目录的工程文件工程组织如下 opencv_qtbinbuild_vcsrcmain.cppui_QMoviePlayer.hQMoviePlayer.hQMoviePlayer.cppQMoviePlayer.uiCMakeLists.txt #cmake工程vcbuild_2015.bat #编译命令 ui_QMoviePlayer.h和QMoviePlayer.ui就是前面采用designer.exe实现的ui及代码头文件。 CMakeLists.txt文件内容如下本文给出的有win/linux的痕迹但是本文只实现了基于vc2015qt_vc2015opencv_vc的win编译方式Linux下本文并没有进行测试有兴趣的读者可以按该模块调整支持实现关于opencv的Linux下库编译及调用案例看本专栏其他博文。qt链接采用了动态库opencv的基于vc2015编译出来的库本文时预先编译好的C/C开发opencv在win下安装及应用_c安装opencv库_py_free-物联智能的博客-CSDN博客。 # CMake 最低版本号要求 cmake_minimum_required (VERSION 3.1.0) # 项目信息 set(proname opencv_qt) project(${proname} VERSION 1.0.0 LANGUAGES CXX)if(WIN32)message(STATUS windows compiling...)set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} /MT)set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} /MTd)add_compile_options($$C_COMPILER_ID:MSVC:/utf-8)add_compile_options($$CXX_COMPILER_ID:MSVC:/utf-8)add_definitions(-D_PLATFORM_IS_WINDOWS_-D_CRT_SECURE_NO_WARNINGS-D_WINSOCK_DEPRECATED_NO_WARNINGS# -DZLIB_WINAPI-DUNICODE-D_UNICODE# -DQT_DLL# -DQT_CORE_LIB# -DQT_GUI_LIB# -DQT_WIDGETS_LIB# -D CMAKE_CXX_FLAGS/utf-8)else(WIN32)message(STATUS linux compiling...)# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -stdc11 -I/usr/include -L/lib/x86_64-linux-gnu -lpthread -pthread -lm -lrt -ldl -lz -luuid ) #qt需要-fPIC编译指定add_definitions(-D_PLATFORM_IS_LINUX_-g# -stdgnu0x-stdc11-O2# -pipe-Wno-invalid-source-encoding-Wdeprecated-declarations-W-fPIC-Wall# -Werror# -Wshadow# -Wformat# -Wpointer-arith-D_REENTRANT# -D_USE_FAST_MACRO# -Wno-long-long# -Wuninitialized# -D_POSIX_PTHREAD_SEMANTICS# -Wno-unused-parameter-fexceptions-DQT_NO_DEBUG-DDQT_QML_DEBUG) endif(WIN32)set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON)if(CMAKE_VERSION VERSION_LESS 3.7.0)set(CMAKE_INCLUDE_CURRENT_DIR ON) endif()set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # 创建 EXECUTABLE_OUTPUT_PATH 指向的文件夹 execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${EXECUTABLE_OUTPUT_PATH})set(PROJECT_CUR_DIR .)if(WIN32) set(QTDIR D:/workForSoftware/Qt/Qt5.8.0/5.8/msvc2015_64) else(WIN32) set(QTDIR /opt/qt-5.8_static) endif(WIN32) message(QTDIR ${QTDIR}) set(Qt5_DIR ${QTDIR}/lib/cmake/Qt5) message(Qt5_DIR ${Qt5_DIR})set(CMAKE_AUTOMOC ON) # set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) #查找需要的Qt库文件最好每一个库都要写Qt也会根据依赖关系自动添加 find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) cmake_policy(SET CMP0020 NEW)set(CMAKE_INCLUDE_CURRENT_DIR ON) #包含编译目录FILE(GLOB srcfile ${PROJECT_CUR_DIR}/src/*.h ${PROJECT_CUR_DIR}/src/*.cpp ) #加载文件夹下的所有源码文件 LIST(APPEND code_file ${srcfile} ) #变量合并include_directories(${PROJECT_CUR_DIR}${PROJECT_CUR_DIR}/src${PROJECT_CUR_DIR}/../../opencv_vc/include${QTDIR}/include${QTDIR}/include/QtCore${QTDIR}/include/QtGui${QTDIR}/include/QtWidgets )#link 目录 link_directories(${QTDIR}/lib${PROJECT_CUR_DIR}/../../opencv_VC/x64/vc14/lib )message(RESOURCES ${RESOURCES})add_executable(${proname} ${code_file} ${RESOURCES} ${RC_FILE} )# 链接指定 set(link_lib Qt5::Core Qt5::Gui Qt5::Widgets ) if(WIN32) if (CMAKE_BUILD_TYPE STREQUAL release) set(link_lib_opencv opencv_img_hash460.lib opencv_world460.lib ) else() set(link_lib_opencv opencv_img_hash460d.lib opencv_world460d.lib ) endif() endif(WIN32)target_link_libraries(${proname} ${link_lib}${link_lib_opencv} )#去除 CMD 窗口 if(WIN32) message(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}) if (CMAKE_BUILD_TYPE STREQUAL release) if(MSVC)set_target_properties(${proname} PROPERTIESWIN32_EXECUTABLE YESLINK_FLAGS /ENTRY:mainCRTStartup) elseif(CMAKE_COMPILER_IS_GNUCXX)SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -mwindows) # Not tested else()message(SEND_ERROR You are using an unsupported Windows compiler! (Not MSVC or GCC)) endif(MSVC) endif()endif(WIN32)vcbuild_2015.bat是为了编译方便创建的一个脚本读者也可以按该脚本命令手动编译。 md build_vc cd ./build_vc REM 单独编译时可能需要独立设置环境变量 if [%vccompilerversion%] EQU [] ( set vccompilerversionVisual Studio 14 2015 Win64 )REM 工程配置 cmake -G %vccompilerversion% .. -DCMAKE_BUILD_TYPEdebug REM 编译 cmake --build . --config debugREM 工程配置 cmake -G %vccompilerversion% .. -DCMAKE_BUILD_TYPErelease REM 编译 cmake --build . --config releasecd .. 2.2 源码设计 下来看看源码如何实现视频读取与播放的。 QMoviePlayer.h内容如下该头文件定义了一个窗口类型该窗口显示部分来自于前面的UI设计“Ui::QMoviePlayer ui”定义了“cv::VideoCapture m_cap”用来捕获视频内容 #ifndef _QMOVIEPLAYER_H_ #define _QMOVIEPLAYER_H_#include ui_QMoviePlayer.h #include QtWidgets/QWidget #include QImage#include opencv2/opencv.hpp #include string using namespace std;QT_BEGIN_NAMESPACE class QPaintEvent; class QTimer; QT_END_NAMESPACEclass QMoviePlayer : public QWidget {Q_OBJECTpublic:QMoviePlayer(QWidget *parent NULL);virtual ~QMoviePlayer(){;}bool open( string file );public slots:void nextFrame();private:void paintEvent( QPaintEvent* q);void _copyImage( void);private:Ui::QMoviePlayer ui; //ui界面cv::VideoCapture m_cap; //opencv的视频读取及捕获图像实现QImage m_qt_img;cv::Mat m_cv_img; //图像缓存矩阵QTimer* m_timer; };#endif //_QMOVIEPLAYER_H_QMoviePlayer.cpp内容如下open函数用于打开一个视频文件并通过QTimer对象来定期读取帧图像数据nextFrame用于读取图像数据并更新到窗口显示_copyImage函数是opencv与QT结合的关键它将opencv捕获的图像m_cv_img转换为qt的图像m_qt_img这样才能将图片按qt方式刷新到窗口显示 #include QMoviePlayer.h#include QPainter #include QTimerQMoviePlayer::QMoviePlayer(QWidget *parent): QWidget(parent) {ui.setupUi( this ); }bool QMoviePlayer::open( string file) {if( !m_cap.open( file)) return false;// If we opened the file, set up everything now://m_cap.read( m_cv_img );m_qt_img QImage(QSize( m_cv_img.cols,m_cv_img.rows),QImage::Format_RGB888);ui.frame-setMinimumSize( m_qt_img.width(),m_qt_img.height());ui.frame-setMaximumSize( m_qt_img.width(),m_qt_img.height());_copyImage();m_timer new QTimer( this );connect(m_timer, SIGNAL( timeout()), this, SLOT( nextFrame()) );m_timer-start( 1000.0 / m_cap.get( cv::CAP_PROP_FPS));return true; }void QMoviePlayer::nextFrame() {// Nothing to do if capture object is not open//if( !m_cap.isOpened()) return;m_cap.read(m_cv_img);if(m_cv_img.empty()) return;_copyImage();this-update(); }void QMoviePlayer::paintEvent( QPaintEvent* e ) {QPainter painter( this );painter.drawImage( QPoint( ui.frame-x(),ui.frame-y()),m_qt_img); }void QMoviePlayer::_copyImage( void) {// Copy the image data into the Qt QImage//cv::Mat cv_header_to_qt_image(cv::Size(m_qt_img.width(),m_qt_img.height()),CV_8UC3,m_qt_img.bits());cv::cvtColor(m_cv_img,cv_header_to_qt_image, cv::COLOR_BGR2RGB); }main.cpp文件内容如下就是qt程序启动后调用前面定义的QMoviePlayer对象读取视频文件argv[1]及刷新显示 #include QApplication #include QMoviePlayer.hint main( int argc, char* argv[]) {QApplication app( argc, argv);QMoviePlayer mp;mp.open( argv[1]);mp.show();return app.exec(); } 三、编译及测试 3.1 程序编译 进入opencv_qt目录 运行vcbuild_2015.bat执行大致如下本文是直接在vscode命令窗口执行 3.2 程序运行 进入opencv_qt\bin\Debug启动命令窗口运行是缺失qt动态库的因此将qt动态库拷贝到该目录下运行注意debug和release的区别为了方便本文把需要运行的视频文件也拷贝到了该目录下如下图 启动命令窗口并运行opencv_qt.exe 程序启动加载视频进行播放如果不能正常播放可以通过日志输出信息进行定位排查。
http://www.w-s-a.com/news/776329/

相关文章:

  • 淄博网站制作优化推广asp做学生信息网站
  • 海口招商建设有限公司网站淮安哪有专业做网站的公司
  • 喀什哪有做网站的国内正规seo网络推广
  • 网站设计初步规划公司网页打不开是什么原因
  • 深圳企业网站建设推广服务php做的商城网站设计论文
  • 韩雪冬网站手机网站开发 宽度
  • 奉贤专业做网站新手怎么做企业网站
  • 做网站用哪几个端口 比较好手机号网站源码
  • 手机免费代理ip网站那个旅游网站做攻略最好
  • 西安做网站找哪家公司好苏州专业网站建设开发
  • dedecms如何做网站网站设计实施方案
  • 网站建设合约品牌设计有哪些
  • 织梦企业门户网站宝塔搭建wordpress网站
  • 网站为什么没有排名了11月将现新冠感染高峰
  • 网站开发维护专员岗位职责辽阳企业网站建设
  • 做外国订单有什么网站网站设计论文提纲
  • 商城网站建设报价方案导师让做网站
  • 清远市企业网站seo联系方式动易官方网站
  • 手机上怎么做能打开的网站一级域名和二级域名跨域
  • 网站首页效果图wordpress 在线教育
  • 电商网站开发团队广西桂林商贸旅游技工学校
  • 网站模板文件怎么下载东莞常平镇邮政编码
  • 建网站需要什么wordpress误删的后果
  • wordpress无插件实现网站地图做阿里巴巴网站店铺装修费用
  • 英文互动网站建设南宁住房和城乡建设局网站
  • 威海微网站建设乐清建网站哪家强
  • 网站和app的开发成本saas系统开发教程
  • ps切片工具做网站大气简洁网站
  • 网至普的营销型网站建设wordpress邮箱验证插件下载
  • 找权重高的网站方法张家港早晨网站建设