实现opencv
This commit is contained in:
parent
62d49d4dc8
commit
57d3bc4912
@ -12,40 +12,50 @@ BIN_FILE = $(PROJECT_NAME)
|
||||
BIN_DIR = binary/$(CONFIG_DIR)
|
||||
OBJ_DIR = object/$(CONFIG_DIR)
|
||||
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)
|
||||
|
||||
include $(MAKE_INCLUDE_DIR)/VimbaCPP.mk
|
||||
include $(MAKE_INCLUDE_DIR)/VimbaImageTransform.mk
|
||||
include $(MAKE_INCLUDE_DIR)/Qt.mk
|
||||
|
||||
|
||||
SOURCE_DIR = $(PROJECT_DIR)/Source
|
||||
|
||||
INCLUDE_DIRS = -I$(SOURCE_DIR) \
|
||||
-I$(EXAMPLES_DIR) \
|
||||
-I$(OBJ_DIR)
|
||||
-I$(EXAMPLES_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) \
|
||||
$(VIMBAIMAGETRANSFORM_LIBS) \
|
||||
$(QTCORE_LIBS) \
|
||||
$(QTGUI_LIBS) \
|
||||
$(QT_LIBS) \
|
||||
$(OPENCV_LIBS)
|
||||
|
||||
DEFINES =
|
||||
|
||||
|
||||
CFLAGS = $(COMMON_CFLAGS) \
|
||||
$(VIMBACPP_CFLAGS) \
|
||||
$(VIMBAIMAGETRANSFORM_CFLAGS) \
|
||||
$(QTCORE_CFLAGS) \
|
||||
$(QTGUI_CFLAGS) \
|
||||
$(QT_CFLAGS) \
|
||||
$(OPENCV_CFLAGS)
|
||||
|
||||
OBJ_FILES = $(OBJ_DIR)/ApiController.o \
|
||||
@ -62,9 +72,7 @@ OBJ_FILES = $(OBJ_DIR)/ApiController.o \
|
||||
GEN_HEADERS = $(OBJ_DIR)/ui_AsynchronousOpenCVRecorder.h
|
||||
|
||||
DEPENDENCIES = VimbaCPP \
|
||||
VimbaImageTransform \
|
||||
QtCore \
|
||||
QtGui
|
||||
VimbaImageTransform
|
||||
|
||||
$(OBJ_DIR)/moc_%.cpp: $(SOURCE_DIR)/%.h $(OBJ_DIR)
|
||||
$(MOC) -o $@ $<
|
||||
|
@ -90,7 +90,18 @@ the use of this software, even if advised of the possibility of such damage.
|
||||
#include "VmbTransform.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
|
||||
//
|
||||
@ -130,17 +141,6 @@ class OpenCVRecorder: public QThread
|
||||
// Example FOURCC codes that can be used with the OpenCVRecorder
|
||||
//
|
||||
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
|
||||
//
|
||||
@ -305,10 +305,10 @@ class OpenCVRecorder: public QThread
|
||||
public:
|
||||
OpenCVRecorder(const QString &fileName, VmbFloat_t fps, VmbUint32_t Width, VmbUint32_t Height)
|
||||
: m_StopThread( false )
|
||||
#ifdef _MSC_VER // codec selection only supported by Windows
|
||||
, m_VideoWriter(fileName.toStdString(), FOURCC_USER_SELECT, fps, cv::Size(Width,Height),true )
|
||||
#ifdef _MSC_VER // Windows 下支持手动选择编码器
|
||||
, m_VideoWriter(fileName.toStdString(), FOURCC_USER_SELECT, fps, cv::Size(Width, Height), true)
|
||||
#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)
|
||||
#endif
|
||||
, m_ConvertImage( Height, Width, CV_8UC3)
|
||||
{
|
||||
@ -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
|
Loading…
Reference in New Issue
Block a user