实现opencv
This commit is contained in:
parent
62d49d4dc8
commit
57d3bc4912
@ -12,40 +12,50 @@ BIN_FILE = $(PROJECT_NAME)
|
|||||||
BIN_DIR = binary/$(CONFIG_DIR)
|
BIN_DIR = binary/$(CONFIG_DIR)
|
||||||
OBJ_DIR = object/$(CONFIG_DIR)
|
OBJ_DIR = object/$(CONFIG_DIR)
|
||||||
BIN_PATH = $(BIN_DIR)/$(BIN_FILE)
|
BIN_PATH = $(BIN_DIR)/$(BIN_FILE)
|
||||||
|
# Qt 工具路径
|
||||||
|
MOC = /usr/lib/aarch64-linux-gnu/qt5/bin/moc
|
||||||
|
UIC = /usr/lib/aarch64-linux-gnu/qt5/bin/uic
|
||||||
|
RCC = /usr/lib/aarch64-linux-gnu/qt5/bin/rcc
|
||||||
|
|
||||||
|
# 使用 pkg-config 获取 Qt 编译标志
|
||||||
|
QT_CFLAGS := $(shell pkg-config --cflags Qt5Core Qt5Gui Qt5Widgets)
|
||||||
|
QT_LIBS := $(shell pkg-config --libs Qt5Core Qt5Gui Qt5Widgets)
|
||||||
|
|
||||||
all: $(BIN_PATH)
|
all: $(BIN_PATH)
|
||||||
|
|
||||||
include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
|
include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
|
||||||
include $(MAKE_INCLUDE_DIR)/VimbaImageTransform.mk
|
include $(MAKE_INCLUDE_DIR)/VimbaImageTransform.mk
|
||||||
include $(MAKE_INCLUDE_DIR)/Qt.mk
|
|
||||||
|
|
||||||
SOURCE_DIR = $(PROJECT_DIR)/Source
|
SOURCE_DIR = $(PROJECT_DIR)/Source
|
||||||
|
|
||||||
INCLUDE_DIRS = -I$(SOURCE_DIR) \
|
INCLUDE_DIRS = -I$(SOURCE_DIR) \
|
||||||
-I$(EXAMPLES_DIR) \
|
-I$(EXAMPLES_DIR) \
|
||||||
-I$(OBJ_DIR)
|
-I$(OBJ_DIR) \
|
||||||
|
-I/usr/include/aarch64-linux-gnu/qt5 \
|
||||||
|
-I/usr/include/aarch64-linux-gnu/qt5/QtCore \
|
||||||
|
-I/usr/include/aarch64-linux-gnu/qt5/QtGui \
|
||||||
|
-I/usr/include/aarch64-linux-gnu/qt5/QtWidgets
|
||||||
|
|
||||||
|
|
||||||
OPENCV_CFLAGS = $(shell $(PKGCFG) --cflags opencv)
|
|
||||||
|
|
||||||
OPENCV_LIBS = $(shell $(PKGCFG) --libs opencv)
|
OPENCV_CFLAGS = $(shell $(PKGCFG) --cflags opencv4)
|
||||||
|
|
||||||
|
OPENCV_LIBS = $(shell $(PKGCFG) --libs opencv4)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LIBS = $(VIMBACPP_LIBS) \
|
LIBS = $(VIMBACPP_LIBS) \
|
||||||
$(VIMBAIMAGETRANSFORM_LIBS) \
|
$(VIMBAIMAGETRANSFORM_LIBS) \
|
||||||
$(QTCORE_LIBS) \
|
$(QT_LIBS) \
|
||||||
$(QTGUI_LIBS) \
|
|
||||||
$(OPENCV_LIBS)
|
$(OPENCV_LIBS)
|
||||||
|
|
||||||
DEFINES =
|
DEFINES =
|
||||||
|
|
||||||
|
|
||||||
CFLAGS = $(COMMON_CFLAGS) \
|
CFLAGS = $(COMMON_CFLAGS) \
|
||||||
$(VIMBACPP_CFLAGS) \
|
$(VIMBACPP_CFLAGS) \
|
||||||
$(VIMBAIMAGETRANSFORM_CFLAGS) \
|
$(VIMBAIMAGETRANSFORM_CFLAGS) \
|
||||||
$(QTCORE_CFLAGS) \
|
$(QT_CFLAGS) \
|
||||||
$(QTGUI_CFLAGS) \
|
|
||||||
$(OPENCV_CFLAGS)
|
$(OPENCV_CFLAGS)
|
||||||
|
|
||||||
OBJ_FILES = $(OBJ_DIR)/ApiController.o \
|
OBJ_FILES = $(OBJ_DIR)/ApiController.o \
|
||||||
@ -62,9 +72,7 @@ OBJ_FILES = $(OBJ_DIR)/ApiController.o \
|
|||||||
GEN_HEADERS = $(OBJ_DIR)/ui_AsynchronousOpenCVRecorder.h
|
GEN_HEADERS = $(OBJ_DIR)/ui_AsynchronousOpenCVRecorder.h
|
||||||
|
|
||||||
DEPENDENCIES = VimbaCPP \
|
DEPENDENCIES = VimbaCPP \
|
||||||
VimbaImageTransform \
|
VimbaImageTransform
|
||||||
QtCore \
|
|
||||||
QtGui
|
|
||||||
|
|
||||||
$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/%.h $(OBJ_DIR)
|
$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/%.h $(OBJ_DIR)
|
||||||
$(MOC) -o $@ $<
|
$(MOC) -o $@ $<
|
||||||
|
@ -90,7 +90,18 @@ the use of this software, even if advised of the possibility of such damage.
|
|||||||
#include "VmbTransform.h"
|
#include "VmbTransform.h"
|
||||||
#include <VimbaCPP/Include/VimbaCPP.h>
|
#include <VimbaCPP/Include/VimbaCPP.h>
|
||||||
|
|
||||||
|
#include <opencv2/videoio.hpp> // 必须包含 videoio 以使用 VideoWriter
|
||||||
|
#include <opencv2/opencv.hpp>
|
||||||
|
|
||||||
|
// 替换原有的 enum 定义
|
||||||
|
static const int FOURCC_USER_SELECT = -1; // 替代 CV_FOURCC_PROMPT
|
||||||
|
static const int FOURCC_DEFAULT = cv::VideoWriter::fourcc('I','Y','U','V');
|
||||||
|
static const int FOURCC_MPEG1 = cv::VideoWriter::fourcc('P','I','M','1');
|
||||||
|
static const int FOURCC_MJPEG = cv::VideoWriter::fourcc('M','J','P','G');
|
||||||
|
static const int FOURCC_MPEG42 = cv::VideoWriter::fourcc('M','P','4','2');
|
||||||
|
static const int FOURCC_MPEG43 = cv::VideoWriter::fourcc('M','P','4','3');
|
||||||
|
static const int FOURCC_DIVX = cv::VideoWriter::fourcc('D','I','V','X');
|
||||||
|
static const int FOURCC_X264 = cv::VideoWriter::fourcc('X','2','6','4');
|
||||||
//
|
//
|
||||||
// Base exception
|
// Base exception
|
||||||
//
|
//
|
||||||
@ -130,17 +141,6 @@ class OpenCVRecorder: public QThread
|
|||||||
// Example FOURCC codes that can be used with the OpenCVRecorder
|
// Example FOURCC codes that can be used with the OpenCVRecorder
|
||||||
//
|
//
|
||||||
VmbUint32_t maxQueueElements() const { return 3; }
|
VmbUint32_t maxQueueElements() const { return 3; }
|
||||||
enum
|
|
||||||
{
|
|
||||||
FOURCC_USER_SELECT = CV_FOURCC_PROMPT,
|
|
||||||
FOURCC_DEFAULT = CV_FOURCC_MACRO('I','Y','U','V'),
|
|
||||||
FOURCC_MPEG1 = CV_FOURCC_MACRO('P','I','M','1'),
|
|
||||||
FOURCC_MJPEG = CV_FOURCC_MACRO('M','J','P','G'),
|
|
||||||
FOURCC_MPEG42 = CV_FOURCC_MACRO('M','P','4','2'),
|
|
||||||
FOURCC_MPEG43 = CV_FOURCC_MACRO('M','P','4','3'),
|
|
||||||
FOURCC_DIVX = CV_FOURCC_MACRO('D','I','V','X'),
|
|
||||||
FOURCC_X264 = CV_FOURCC_MACRO('X','2','6','4'),
|
|
||||||
};
|
|
||||||
//
|
//
|
||||||
// frame data temporary storage
|
// frame data temporary storage
|
||||||
//
|
//
|
||||||
@ -305,7 +305,7 @@ class OpenCVRecorder: public QThread
|
|||||||
public:
|
public:
|
||||||
OpenCVRecorder(const QString &fileName, VmbFloat_t fps, VmbUint32_t Width, VmbUint32_t Height)
|
OpenCVRecorder(const QString &fileName, VmbFloat_t fps, VmbUint32_t Width, VmbUint32_t Height)
|
||||||
: m_StopThread( false )
|
: m_StopThread( false )
|
||||||
#ifdef _MSC_VER // codec selection only supported by Windows
|
#ifdef _MSC_VER // Windows 下支持手动选择编码器
|
||||||
, m_VideoWriter(fileName.toStdString(), FOURCC_USER_SELECT, fps, cv::Size(Width, Height), true)
|
, m_VideoWriter(fileName.toStdString(), FOURCC_USER_SELECT, fps, cv::Size(Width, Height), true)
|
||||||
#else
|
#else
|
||||||
, m_VideoWriter(fileName.toStdString(), FOURCC_X264, fps, cv::Size(Width, Height), true)
|
, m_VideoWriter(fileName.toStdString(), FOURCC_X264, fps, cv::Size(Width, Height), true)
|
||||||
@ -398,4 +398,20 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class RTSPStreamer {
|
||||||
|
public:
|
||||||
|
RTSPStreamer(const std::string& rtsp_url, int width, int height, int fps);
|
||||||
|
~RTSPStreamer();
|
||||||
|
bool pushFrame(const cv::Mat& frame);
|
||||||
|
bool isConnected() const { return m_connected; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string m_rtspUrl;
|
||||||
|
AVFormatContext* m_fmtCtx = nullptr;
|
||||||
|
AVCodecContext* m_codecCtx = nullptr;
|
||||||
|
AVStream* m_stream = nullptr;
|
||||||
|
SwsContext* m_swsCtx = nullptr;
|
||||||
|
std::atomic<bool> m_connected{false};
|
||||||
|
int m_width, m_height, m_fps;
|
||||||
|
};
|
||||||
#endif
|
#endif
|
Loading…
Reference in New Issue
Block a user