欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > QT 机器视觉 (3. 虚拟相机SDK、测试工具)

QT 机器视觉 (3. 虚拟相机SDK、测试工具)

2024/10/28 18:05:17 来源:https://blog.csdn.net/qq_37529913/article/details/142749396  浏览:    关键词:QT 机器视觉 (3. 虚拟相机SDK、测试工具)

        本专栏从实际需求场景出发详细还原、分别介绍大型工业化场景、专业实验室场景、自动化生产线场景、各种视觉检测物体场景介绍本专栏应用场景

        更适合涉及到视觉相关工作者、包括但不限于一线操作人员、现场实施人员、项目相关维护人员,希望了解2D、3D相机视觉相关操作原理、已经出现问题快速排查、快速解决现场难题,推荐阅读本系列文章

        同时也适合新手入门,或者想深入研究、正在接触该类型项目开发的开发者研究的阅读文章

        视觉软件中从:  1.工业场景的相机选型    2: 相机SDK的模拟开发 各种模式设置、内部回调、返回图像、内部SDK编写、各种各类的SDK接口实现  3. 工业视觉软件的界面设计,ui的各种使用方法、SDK集成、多线程处理、buffer图像缓存处理、图像不同的处理显示、每个过程均会详细介绍实现 4. opencv 图像处理的各个过程

文章说明: 本系列分为两个部分

        1.  各种相机的介绍、原理操作、适宜的场景

        2.  相机SDK开发、编写SDK、工业软件、相关技术文章

有不足的地方请留言会改进,本系列文章预计不低于30篇 预计半年之内完结

使用到相关技术 会引入博主发布的技术文章,方便学习 真正做到 浅入深出,通俗易懂 高效 的学会相关技术短暂会使用虚拟SDK、接口来进行发布文章 编写界面,后续会在海康、大恒中间选择一款

版权声明:本文禁止转载、复制二次发布,仅供付费读者研究 

有相关问题请联系 Dream.2017@qq.com 官方网站 www.dreambegins.vip

QT 机器视觉 (3. 虚拟相机SDK、测试工具)目录

1 目录结构

2 QVirtualCamera

2.1 设置

3 QVirtualCameraTest

2.1 设置

3 运行效果

4 其它文章


本章实现了

1 目录结构

2 QVirtualCamera

// QVirtualCamera.h
#pragma once#include <QtCore/qglobal.h>
#include <functional>
#include <thread>
#include <chrono>
#include <cstdlib>
#include <mutex>#ifndef BUILD_STATIC
# if defined(QVIRTUALCAMERA_LIB)
#  define QVIRTUALCAMERA_EXPORT Q_DECL_EXPORT
# else
#  define QVIRTUALCAMERA_EXPORT Q_DECL_IMPORT
# endif
#else
# define QVIRTUALCAMERA_EXPORT
#endif// 图像数据回调类型
typedef std::function<void(const unsigned char* data, int width, int height)> ImageCallback;class QVirtualCamera 
{
public:QVirtualCamera();static ImageCallback g_imageCallback; // 静态成员变量static bool g_running;                 // 静态成员变量static std::mutex g_mutex;            // 互斥量// 模拟图像数据生成void GenerateImageData(unsigned char* data, int width, int height);void RegisterImageCallback(ImageCallback callback);void StartCamera();void StopCamera();
};

// QVirtualCamera.cpp
#include "QVirtualCamera.h"bool QVirtualCamera::g_running = false; // 静态成员初始化
ImageCallback QVirtualCamera::g_imageCallback; // 静态成员初始化
std::mutex QVirtualCamera::g_mutex; // 互斥量初始化QVirtualCamera::QVirtualCamera()
{srand(static_cast<unsigned int>(time(0))); // 初始化随机数种子
}// 模拟图像数据生成
void QVirtualCamera::GenerateImageData(unsigned char* data, int width, int height)
{for (int i = 0; i < width * height * 3; ++i) {data[i] = static_cast<unsigned char>(rand() % 256); // 随机生成图像数据}
}// 启动虚拟相机
void QVirtualCamera::StartCamera()
{g_running = true;std::thread([=]() {const int width = 640;const int height = 480;unsigned char* imageData = new unsigned char[width * height * 3]; // RGB图像数据while (g_running) {GenerateImageData(imageData, width, height); // 生成图像数据// 使用互斥量保护回调函数的访问{std::lock_guard<std::mutex> lock(g_mutex);if (g_imageCallback) {g_imageCallback(imageData, width, height); // 调用回调函数}}std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 模拟帧率}delete[] imageData; // 清理内存}).detach();
}// 停止虚拟相机
void QVirtualCamera::StopCamera() 
{g_running = false;
}// 注册图像回调
void QVirtualCamera::RegisterImageCallback(ImageCallback callback) 
{std::lock_guard<std::mutex> lock(g_mutex); // 使用互斥量保护g_imageCallback = callback;
}

2.1 设置

常规输出目录

$(SolutionDir)QPlugin\$(Configuration)\

配置类型

静态库(.lib)

浏览信息 生成后事件

   xcopy /Y /I "QVirtualCamera.h" "$(SolutionDir)QPlugin\$(Configuration)\include\"

说明

具体目录自行决定,debug目录和release注意区分

3 QVirtualCameraTest

#pragma once#include <QtWidgets/QMainWindow>
#include "ui_QVirtualCameraTest.h"
#include <iostream>
#include <Windows.h>#include <QDebug>
#include "QVirtualCamera.h"class QVirtualCameraTest : public QMainWindow
{Q_OBJECTpublic:QVirtualCameraTest(QWidget *parent = nullptr);~QVirtualCameraTest();private:Ui::QVirtualCameraTestClass ui;QVirtualCamera* mpCamera;void OnInDialog();static void ImageReceived(const unsigned char* data, int width, int height);
};
#include "QVirtualCameraTest.h"QVirtualCameraTest::QVirtualCameraTest(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);OnInDialog();
}QVirtualCameraTest::~QVirtualCameraTest()
{}void QVirtualCameraTest::ImageReceived(const unsigned char* data, int width, int height)
{QDateTime currentDateTime = QDateTime::currentDateTime();qDebug() << currentDateTime.toString() << "Received image of size: " << width << "x" << height ;// 处理图像数据
}void QVirtualCameraTest::OnInDialog()
{mpCamera = new QVirtualCamera;// 注册回调mpCamera->RegisterImageCallback(ImageReceived);// 启动虚拟相机mpCamera->StartCamera();// 模拟运行一段时间//std::this_thread::sleep_for(std::chrono::seconds(10000));停止虚拟相机//mpCamera->StopCamera();}

2.1 设置

C/C++ 常规 附加包含目录

\QVirtualClass\QPlugin\Debug\

连接器 常规 附加库目录

QVirtualClass\QPlugin\Debug;

连接器 输入

QVirtualCamera.lib;

说明

具体目录自行决定,debug目录和release注意区分

3 运行效果

4 其它文章

QT 机器视觉 1.相机类型-CSDN博客

QT 机器视觉 2.应用场景详解-CSDN博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com