basicly done
This commit is contained in:
parent
ed0895405a
commit
0cc98925c2
@ -28,18 +28,18 @@ target_include_directories(${PROJECT_NAME} PRIVATE
|
|||||||
# ====== inner headers ======
|
# ====== inner headers ======
|
||||||
|
|
||||||
# ====== Qt6 & OpenCV ======
|
# ====== Qt6 & OpenCV ======
|
||||||
set(Qt6_DIR "D:/Environments/Qt/Qt6.9/6.9.0/msvc2022_64/lib/cmake/Qt6" CACHE PATH "Path to Qt6 SDK")
|
set(Qt6_DIR "D:/ProgramData/Qt6.9/6.9.0/msvc2022_64/lib/cmake/Qt6" CACHE PATH "Path to Qt6 SDK")
|
||||||
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
|
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)
|
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)
|
||||||
|
|
||||||
set(OpenCV_DIR "D:/Environments/opencv/build" CACHE PATH "Path to OpenCV SDK")
|
set(OpenCV_DIR "D:/ProgramData/OpenCV4.11.0/build" CACHE PATH "Path to OpenCV SDK")
|
||||||
find_package(OpenCV REQUIRED)
|
find_package(OpenCV REQUIRED)
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS})
|
target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS})
|
||||||
# ====== Qt6 & OpenCV ======
|
# ====== Qt6 & OpenCV ======
|
||||||
|
|
||||||
|
|
||||||
# ====== MVS ======
|
# ====== MVS ======
|
||||||
set(MVS_DIR "D:/Environments/MVS/Development" CACHE PATH "Path to MVS SDK")
|
set(MVS_DIR "D:/Program Files/MVS/Development" CACHE PATH "Path to MVS SDK")
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE
|
target_include_directories(${PROJECT_NAME} PRIVATE
|
||||||
${MVS_DIR}/Includes
|
${MVS_DIR}/Includes
|
||||||
|
|||||||
@ -1,11 +1,16 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QImage>
|
||||||
|
|
||||||
#include <CameraParams.h>
|
#include <CameraParams.h>
|
||||||
#include <MvCameraControl.h>
|
#include <MvCameraControl.h>
|
||||||
#include <MvErrorDefine.h>
|
#include <MvErrorDefine.h>
|
||||||
#include <PixelType.h>
|
#include <PixelType.h>
|
||||||
|
|
||||||
class HikCamera{
|
class HikCamera : public QObject{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// 获取单例实例
|
// 获取单例实例
|
||||||
static HikCamera &getInstance() {
|
static HikCamera &getInstance() {
|
||||||
@ -31,6 +36,9 @@ public:
|
|||||||
// 注册图像回调函数
|
// 注册图像回调函数
|
||||||
void registerImageCallback();
|
void registerImageCallback();
|
||||||
|
|
||||||
|
// 回调图像处理函数
|
||||||
|
void handleFrameData(unsigned char *pData, MV_FRAME_OUT_INFO_EX *pFrameInfo);
|
||||||
|
|
||||||
// 禁用拷贝和移动
|
// 禁用拷贝和移动
|
||||||
HikCamera(const HikCamera &) = delete;
|
HikCamera(const HikCamera &) = delete;
|
||||||
HikCamera(HikCamera &&) = delete;
|
HikCamera(HikCamera &&) = delete;
|
||||||
@ -45,4 +53,7 @@ private:
|
|||||||
|
|
||||||
// 相机句柄
|
// 相机句柄
|
||||||
void *m_handler = nullptr;
|
void *m_handler = nullptr;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void newImage(const QImage &qimage);
|
||||||
};
|
};
|
||||||
@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QtWidgets>
|
#include <QtWidgets>
|
||||||
|
#include <QImage>
|
||||||
|
|
||||||
class HikWidget : public QWidget {
|
class HikWidget : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -11,6 +12,9 @@ private:
|
|||||||
void initUI();
|
void initUI();
|
||||||
void connectAllSignalsAndSlots();
|
void connectAllSignalsAndSlots();
|
||||||
|
|
||||||
|
// 图像变量
|
||||||
|
QImage m_image;
|
||||||
|
|
||||||
// 左侧视图
|
// 左侧视图
|
||||||
QGraphicsScene *m_scene;
|
QGraphicsScene *m_scene;
|
||||||
QGraphicsPixmapItem *m_pixmapItem;
|
QGraphicsPixmapItem *m_pixmapItem;
|
||||||
|
|||||||
@ -6,10 +6,10 @@
|
|||||||
// 静态成员函数作为SDK回调函数
|
// 静态成员函数作为SDK回调函数
|
||||||
static void __stdcall ImageCallback(unsigned char *pData, MV_FRAME_OUT_INFO_EX *pFrameInfo, void *pUser) {
|
static void __stdcall ImageCallback(unsigned char *pData, MV_FRAME_OUT_INFO_EX *pFrameInfo, void *pUser) {
|
||||||
// 将用户数据转换为HikCamera实例
|
// 将用户数据转换为HikCamera实例
|
||||||
/*HikCamera *instance = static_cast<HikCamera *>(pUser);
|
HikCamera *instance = static_cast<HikCamera *>(pUser);
|
||||||
if (instance) {
|
if (instance) {
|
||||||
instance->handleFrameData(pData, pFrameInfo);
|
instance->handleFrameData(pData, pFrameInfo);
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HikCamera::init() {
|
void HikCamera::init() {
|
||||||
@ -27,6 +27,10 @@ void HikCamera::init() {
|
|||||||
|
|
||||||
// 打开相机
|
// 打开相机
|
||||||
nRet = MV_CC_OpenDevice(m_handler);
|
nRet = MV_CC_OpenDevice(m_handler);
|
||||||
|
|
||||||
|
// 设置像素格式为 RGB8
|
||||||
|
nRet = MV_CC_SetEnumValue(m_handler, "PixelFormat", PixelType_Gvsp_RGB8_Packed);
|
||||||
|
if (nRet == MV_OK) { std::cout << "Set pixel fomat succeed" << std::endl; }
|
||||||
}
|
}
|
||||||
|
|
||||||
void HikCamera::deinit() {
|
void HikCamera::deinit() {
|
||||||
@ -57,5 +61,19 @@ void HikCamera::setGain(double gain) {}
|
|||||||
|
|
||||||
void HikCamera::registerImageCallback() {
|
void HikCamera::registerImageCallback() {
|
||||||
int nRet = MV_OK;
|
int nRet = MV_OK;
|
||||||
nRet = MV_CC_RegisterImageCallBackEx(m_handler, ImageCallback, nullptr);
|
nRet = MV_CC_RegisterImageCallBackEx(m_handler, ImageCallback, this);
|
||||||
|
nRet = MV_CC_SetImageNodeNum(m_handler, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HikCamera::handleFrameData(unsigned char *pData, MV_FRAME_OUT_INFO_EX *pFrameInfo) {
|
||||||
|
if (!pData) {
|
||||||
|
std::cout << "New image nullptr" << std::endl;
|
||||||
|
}
|
||||||
|
const int width = pFrameInfo->nExtendWidth;
|
||||||
|
const int height = pFrameInfo->nExtendHeight;
|
||||||
|
const int dataBytesPerLine = pFrameInfo->nExtendWidth * 3;
|
||||||
|
|
||||||
|
QImage deepCopy(width, height, QImage::Format_RGB888);
|
||||||
|
if (pData) { memcpy(deepCopy.bits(), pData, pFrameInfo->nFrameLenEx); }
|
||||||
|
emit newImage(deepCopy);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -196,4 +196,15 @@ void HikWidget::connectAllSignalsAndSlots() {
|
|||||||
HikCamera::getInstance().setGain(value);
|
HikCamera::getInstance().setGain(value);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 新图像到来
|
||||||
|
connect(&HikCamera::getInstance(), &HikCamera::newImage, this,
|
||||||
|
[this](const QImage &qimage) {
|
||||||
|
if (qimage.isNull()) {
|
||||||
|
qDebug() << "Qimage invalid";
|
||||||
|
}
|
||||||
|
m_image = qimage;
|
||||||
|
QPixmap pixmap = QPixmap::fromImage(qimage);
|
||||||
|
m_pixmapItem->setPixmap(pixmap);
|
||||||
|
m_gv->fitInView(m_pixmapItem, Qt::KeepAspectRatio);
|
||||||
|
}, Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user