国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

計(jì)算機(jī)科學(xué)專業(yè)就業(yè)方向石家莊seo報(bào)價(jià)

計(jì)算機(jī)科學(xué)專業(yè)就業(yè)方向,石家莊seo報(bào)價(jià),網(wǎng)站建設(shè)專業(yè)的公司哪家好,網(wǎng)站編輯怎么做目錄 一、qt_ui創(chuàng)建 1.1 ui設(shè)置 1.2 ui及代碼輸出保存 二、創(chuàng)建工程 2.1 工程目錄及編譯設(shè)置 2.2 源碼設(shè)計(jì) 三、編譯及測(cè)試 3.1 程序編譯 3.2 程序運(yùn)行 首先聲明,這是一個(gè)OpenCV 3學(xué)習(xí)文檔的案例,但是說明有些過于省略,只有一些簡(jiǎn)短的代碼…

目錄

一、qt_ui創(chuàng)建

??????? 1.1 ui設(shè)置

???????? 1.2 ui及代碼輸出保存

二、創(chuàng)建工程

??????? 2.1 工程目錄及編譯設(shè)置

??????? 2.2 源碼設(shè)計(jì)

三、編譯及測(cè)試

??????? 3.1 程序編譯

??????? 3.2 程序運(yùn)行


??????? 首先聲明,這是一個(gè)OpenCV 3學(xué)習(xí)文檔的案例,但是說明有些過于省略,只有一些簡(jiǎn)短的代碼描述,本人在學(xué)習(xí)驗(yàn)證過程中將其記錄下來分享給大家。

一、qt_ui創(chuàng)建

??????? 1.1 ui設(shè)置

??????? 本文采用qt5.8_msvc2015_64版本,

????????進(jìn)入qt的bin目錄,打開qt_ui設(shè)計(jì)工具designer.exe

???????? 創(chuàng)建一個(gè)Widget窗體,即對(duì)象QWidget,命名為QMoviePlayer。

???????? 隨后創(chuàng)建一個(gè)QFrame對(duì)象,對(duì)象名為frame,該對(duì)象可以隨意在窗體QMoviePlayer拉出一個(gè)合適的長(zhǎng)寬比顯示框,該顯示框用來顯示視頻使用。

???????? 完成設(shè)置后,保存該UI,例如QMoviePlayer.ui

???????? 1.2 ui及代碼輸出保存

????????本人的QMoviePlayer.ui文件的xml內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>QMoviePlayer</class><widget class="QWidget" name="QMoviePlayer"><property name="geometry"><rect><x>0</x><y>0</y><width>600</width><height>303</height></rect></property><property name="windowTitle"><string>Form</string></property><widget class="QFrame" name="frame"><property name="geometry"><rect><x>0</x><y>0</y><width>601</width><height>241</height></rect></property><property name="frameShape"><enum>QFrame::StyledPanel</enum></property><property name="frameShadow"><enum>QFrame::Raised</enum></property></widget></widget><resources/><connections/>
</ui>

??????? 點(diǎn)擊窗體菜單,進(jìn)入查看代碼,保存該代碼文件為ui_QMoviePlayer.h,或新創(chuàng)建一個(gè)頭文件將該內(nèi)容直接復(fù)制到頭文件中保存。

???????? 本人的ui_QMoviePlayer.h的代碼內(nèi)容如下。

/********************************************************************************
** 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/QWidget>QT_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

二、創(chuàng)建工程

??????? 2.1 工程目錄及編譯設(shè)置

??????? 創(chuàng)建一個(gè)opencv_qt目錄的工程文件,工程組織如下:

opencv_qtbinbuild_vcsrcmain.cppui_QMoviePlayer.hQMoviePlayer.hQMoviePlayer.cppQMoviePlayer.uiCMakeLists.txt      #cmake工程vcbuild_2015.bat    #編譯命令

????????ui_QMoviePlayer.h和QMoviePlayer.ui就是前面采用designer.exe實(shí)現(xiàn)的ui及代碼頭文件。

????????CMakeLists.txt文件內(nèi)容如下,本文給出的有win/linux的痕跡,但是本文只實(shí)現(xiàn)了基于vc2015+qt_vc2015+opencv_vc的win編譯方式,Linux下本文并沒有進(jìn)行測(cè)試,有興趣的讀者可以按該模塊調(diào)整支持實(shí)現(xiàn)(關(guān)于opencv的Linux下庫編譯及調(diào)用案例看本專欄其他博文)。qt鏈接采用了動(dòng)態(tài)庫,opencv的基于vc2015編譯出來的庫本文時(shí)預(yù)先編譯好的(C/C++開發(fā),opencv在win下安裝及應(yīng)用_c++安裝opencv庫_py_free-物聯(lián)智能的博客-CSDN博客)。

# CMake 最低版本號(hào)要求
cmake_minimum_required (VERSION 3.1.0)
# 項(xiàng)目信息
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} -std=c++11 -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"# "-std=gnu++0x""-std=c++11""-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)
# 創(chuàng)建 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庫文件,最好每一個(gè)庫都要寫,Qt也會(huì)根據(jù)依賴關(guān)系自動(dòng)添加
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是為了編譯方便創(chuàng)建的一個(gè)腳本,讀者也可以按該腳本命令手動(dòng)編譯。

md build_vc
cd ./build_vc
@REM 單獨(dú)編譯時(shí)可能需要獨(dú)立設(shè)置環(huán)境變量
if [%vccompilerversion%] EQU  [] ( set vccompilerversion="Visual Studio 14 2015 Win64" )@REM 工程配置
cmake -G %vccompilerversion% .. -DCMAKE_BUILD_TYPE=debug
@REM 編譯
cmake --build . --config debug@REM 工程配置
cmake -G %vccompilerversion% .. -DCMAKE_BUILD_TYPE=release
@REM 編譯
cmake --build . --config releasecd ..

??????? 2.2 源碼設(shè)計(jì)

????????下來看看源碼如何實(shí)現(xiàn)視頻讀取與播放的。

????????QMoviePlayer.h內(nèi)容如下,該頭文件定義了一個(gè)窗口類型,該窗口顯示部分來自于前面的UI設(shè)計(jì)“Ui::QMoviePlayer ui”,定義了“cv::VideoCapture m_cap”用來捕獲視頻內(nèi)容:

#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的視頻讀取及捕獲圖像實(shí)現(xiàn)QImage m_qt_img;cv::Mat m_cv_img;       //圖像緩存矩陣QTimer* m_timer;
};#endif //_QMOVIEPLAYER_H_

????????QMoviePlayer.cpp內(nèi)容如下,open函數(shù)用于打開一個(gè)視頻文件,并通過QTimer對(duì)象來定期讀取幀圖像數(shù)據(jù),nextFrame用于讀取圖像數(shù)據(jù)并更新到窗口顯示;_copyImage函數(shù)是opencv與QT結(jié)合的關(guān)鍵,它將opencv捕獲的圖像m_cv_img轉(zhuǎn)換為qt的圖像m_qt_img,這樣才能將圖片按qt方式刷新到窗口顯示:

#include "QMoviePlayer.h"#include <QPainter>
#include <QTimer>QMoviePlayer::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文件內(nèi)容如下,就是qt程序啟動(dòng)后,調(diào)用前面定義的QMoviePlayer對(duì)象,讀取視頻文件(argv[1])及刷新顯示:

#include <QApplication>
#include <QMoviePlayer.h>int main( int argc, char* argv[])
{QApplication app( argc, argv);QMoviePlayer mp;mp.open( argv[1]);mp.show();return app.exec();
}

三、編譯及測(cè)試

??????? 3.1 程序編譯

??????? 進(jìn)入opencv_qt目錄

??????? 運(yùn)行vcbuild_2015.bat,執(zhí)行大致如下(本文是直接在vscode命令窗口執(zhí)行):

??????? 3.2 程序運(yùn)行

???????? 進(jìn)入opencv_qt\bin\Debug,啟動(dòng)命令窗口運(yùn)行是缺失qt動(dòng)態(tài)庫的,因此將qt動(dòng)態(tài)庫拷貝到該目錄下運(yùn)行,注意debug和release的區(qū)別,為了方便,本文把需要運(yùn)行的視頻文件也拷貝到了該目錄下,如下圖:

???????? 啟動(dòng)命令窗口,并運(yùn)行opencv_qt.exe

???????? 程序啟動(dòng),加載視頻進(jìn)行播放,如果不能正常播放,可以通過日志輸出信息進(jìn)行定位排查。

http://aloenet.com.cn/news/34293.html

相關(guān)文章:

  • 網(wǎng)站備案是 備案空間嗎考試培訓(xùn)
  • 怎樣做自己的銷售網(wǎng)站6草根seo視頻大全網(wǎng)站
  • 機(jī)械設(shè)備網(wǎng)優(yōu)化內(nèi)容
  • 網(wǎng)站建設(shè)方案及報(bào)價(jià)單seo外包優(yōu)化網(wǎng)站
  • 服務(wù)器怎么發(fā)布網(wǎng)站國(guó)際新聞最新消息十條
  • php動(dòng)態(tài)網(wǎng)站開發(fā)實(shí)例教程第2版域名查詢138ip
  • 怎樣做電商網(wǎng)站社群營(yíng)銷案例
  • 法人變更在哪個(gè)網(wǎng)站做公示重慶森林為什么不能看
  • 知名的網(wǎng)站制作武漢網(wǎng)絡(luò)推廣優(yōu)化
  • bazien wordpress旅游企業(yè)seo官網(wǎng)分析報(bào)告
  • php商城網(wǎng)站建設(shè)多少錢百度推廣營(yíng)銷怎么做
  • 織夢(mèng)整形醫(yī)院網(wǎng)站開發(fā)江門網(wǎng)站優(yōu)化公司
  • 駕校網(wǎng)站建設(shè)關(guān)鍵詞北京網(wǎng)站優(yōu)化哪家好
  • java做網(wǎng)站與php做網(wǎng)站鏈接提交
  • 開個(gè)網(wǎng)站做上海關(guān)鍵詞優(yōu)化推薦
  • 知名網(wǎng)站建設(shè)查排名官網(wǎng)
  • 延吉網(wǎng)站優(yōu)化網(wǎng)絡(luò)營(yíng)銷的策略包括
  • 怎么樣做網(wǎng)站的目錄結(jié)構(gòu)查找網(wǎng)站
  • 麗江網(wǎng)絡(luò)推廣廊坊seo推廣公司
  • 今天天津最新通告南寧seo優(yōu)化
  • 怎樣建設(shè)公司網(wǎng)站小程序seo服務(wù)商排名
  • 網(wǎng)站建設(shè)項(xiàng)目報(bào)價(jià)網(wǎng)站歷史權(quán)重查詢
  • 網(wǎng)站改版 百度北京seo優(yōu)化技術(shù)
  • 網(wǎng)站被入侵后需做的檢測(cè) 1關(guān)鍵詞分為哪幾類
  • 做網(wǎng)站的軟件公司長(zhǎng)尾關(guān)鍵詞挖掘愛站網(wǎng)
  • 國(guó)家水資源監(jiān)控能力建設(shè)網(wǎng)站semir是什么牌子衣服
  • 黃岡黃頁寧波網(wǎng)絡(luò)推廣seo軟件
  • 珠海營(yíng)銷營(yíng)網(wǎng)站建設(shè)公司培訓(xùn)機(jī)構(gòu)不退費(fèi)最有效方式
  • 深圳網(wǎng)站建設(shè) 推薦xtdseo百度系app有哪些
  • 做網(wǎng)站算軟件開發(fā)么長(zhǎng)尾關(guān)鍵詞在線查詢