From 40c2e69663a3ad9d84f550e6edc1b33d3b9a0b82 Mon Sep 17 00:00:00 2001 From: zara Date: Mon, 15 Aug 2022 22:33:28 +0800 Subject: [PATCH] init --- .gitignore | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ CMakeLists.txt | 66 ++++++++++++++++++++++++++++++++++++++++++++ main.cpp | 11 ++++++++ mainwindow.cpp | 50 ++++++++++++++++++++++++++++++++++ mainwindow.h | 43 +++++++++++++++++++++++++++++ mainwindow.ui | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 315 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 main.cpp create mode 100644 mainwindow.cpp create mode 100644 mainwindow.h create mode 100644 mainwindow.ui diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..860f617 --- /dev/null +++ b/.gitignore @@ -0,0 +1,74 @@ +# This file is used to ignore files which are generated +# ---------------------------------------------------------------------------- + +*~ +*.autosave +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.rej +*.so +*.so.* +*_pch.h.cpp +*_resource.rc +*.qm +.#* +*.*# +core +!core/ +tags +.DS_Store +.directory +*.debug +Makefile* +*.prl +*.app +moc_*.cpp +ui_*.h +qrc_*.cpp +Thumbs.db +*.res +*.rc +/.qmake.cache +/.qmake.stash + +# qtcreator generated files +*.pro.user* + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb +*.sdf +*.opensdf +*.vcxproj +*vcxproj.* + +# MinGW generated files +*.Debug +*.Release + +# Python byte code +*.pyc + +# Binaries +# -------- +*.dll +*.exe + +CMakeLists.txt.user \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..52297ba --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,66 @@ +cmake_minimum_required(VERSION 3.5) + +project(cap0 VERSION 0.1 LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) + + +set(PROJECT_SOURCES + main.cpp + mainwindow.cpp + mainwindow.h + mainwindow.ui +) + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(cap0 + MANUAL_FINALIZATION + ${PROJECT_SOURCES} + ) +# Define target properties for Android with Qt 6 as: +# set_property(TARGET cap0 APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR +# ${CMAKE_CURRENT_SOURCE_DIR}/android) +# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation +else() + if(ANDROID) + add_library(cap0 SHARED + ${PROJECT_SOURCES} + ) +# Define properties for Android with Qt 5 after find_package() calls as: +# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") + else() + add_executable(cap0 + ${PROJECT_SOURCES} + ) + endif() +endif() + +target_link_libraries(cap0 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) +set_target_properties(cap0 PROPERTIES + MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE +) + +if(QT_VERSION_MAJOR EQUAL 6) + qt_finalize_executable(cap0) +endif() + + +include_directories("C:/msys64/mingw64/include/opencv4") + +file(GLOB CVLIBS "C:/msys64/mingw64/lib/libopencv*.a") + +target_link_libraries(cap0 PRIVATE ${CVLIBS}) diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..fd3e533 --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..9b64251 --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,50 @@ +#include "mainwindow.h" +#include "./ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); + cap = new VideoCapture(0); + onCap = false; + vt = new QTimer(this); +// vt->start(20); + QObject::connect(vt,SIGNAL(timeout()),this,SLOT(showImage())); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + + +void MainWindow::on_pushButton_clicked() +{ + if(onCap){ + vt->stop(); + onCap = false; + } + else{ + vt->start(20); + onCap = true; + } +} + +void MainWindow::showImage(){ + if(NULL!=cap){ + if(cap->read(image)){ + ui->label->setPixmap(QPixmap::fromImage(QImage(image.data,image.cols,image.rows,QImage::Format_RGB888))); + } + } +} + +void MainWindow::on_pushButton_2_clicked() +{ + QFile f("img.bin"); + f.open(QIODevice::ReadWrite); + QDataStream streamout(&f); + streamout.writeBytes((char*)image.data,image.rows*image.cols*3); + f.close(); +} + diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..dd2ba58 --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,43 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace cv; + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + void on_pushButton_clicked(); + void showImage(); + + void on_pushButton_2_clicked(); + +private: + Ui::MainWindow *ui; + VideoCapture* cap; + bool onCap; + QTimer* vt; + Mat image; + + +}; +#endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..0b09ac3 --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,71 @@ + + + MainWindow + + + + 0 + 0 + 993 + 496 + + + + MainWindow + + + + + + 20 + 30 + 80 + 21 + + + + open + + + + + + 140 + 30 + 571 + 401 + + + + + + + + + + 20 + 70 + 80 + 21 + + + + save + + + + + + + 0 + 0 + 993 + 19 + + + + + + + +