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

news2024/10/25 15:31:03

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

        更适合涉及到视觉相关工作者、包括但不限于一线操作人员、现场实施人员、项目相关维护人员,希望了解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_OBJECT

public:
    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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式ID生成策略

文章目录 分布式ID必要性1.UUID2.基于DB的自增主键方案3.数据库多主模式4.号段模式5.Redis6.Zookeeper7.ETCD8.雪花算法9.百度(Uidgenerator)10.美团(Leaf)11.滴滴(TinyID) 分布式ID必要性 业务量小于500W的时候单独一个mysql即可提供服务&#xff0c;再大点的时候就进行读写分…

视频智能分析平台LiteAIServer烟火识别软件引领烟火检测与识别的智能新纪元

随着人工智能技术的飞速进步&#xff0c;视频智能分析技术正以前所未有的深度和广度渗透至安全防护、环境监测等多个关键领域。其中&#xff0c;烟火识别软件LiteAIServer凭借其卓越的烟火检测与识别算法&#xff0c;成为了业界瞩目的焦点。 一、烟火检测&#xff1a;守护公共安…

汽车及零配件企业海量文件数据如何管

汽车行业特点 汽车行业是工业企业皇冠上的一颗明珠&#xff0c;在国民经济中占据着举足轻重的地位。汽车行业具备技术密集、创新速度快、供应链复杂等特点&#xff0c;具体体现为&#xff1a; 技术密集&#xff1a;汽车行业是技术密集型行业&#xff0c;覆盖机械、电子、软件、…

【CSS3】css开篇基础(4)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

cpp的string类

本篇将讲述string类中的各种重要和常用函数&#xff08;string()、begin&#xff08;&#xff09;、rbegin&#xff08;&#xff09;、cbegin&#xff08;&#xff09;、crbegin&#xff08;&#xff09;、end&#xff08;&#xff09;、rend&#xff08;&#xff09;、cend&am…

20241024拿掉飞凌OK3588-C的开发板linux R4启动时的LOGO

20241024拿掉飞凌OK3588-C的开发板linux R4启动时的LOGO 2024/10/24 14:20 缘起&#xff1a;公司的产品可能要卖到北边/敏感地区。 开机肯定有飞凌的LOGO。 要么是公司的LOGO&#xff0c;要么是中性的&#xff1a;全黑色或者是一朵花【稍微有点品味】。 所以要拿掉uboot/Kernel…

汽车级DC-DC转换器英飞凌TLF35584

上汽荣威都在用的汽车级DC-DC转换器英飞凌TLF35584 今天平台君从IPBrain数据库中给大家带来的一款由Infineon(英飞凌)推出的一款多路输出安全电源芯片,具备高可靠性和安全性。适用于汽车电子系统中的多种应用场景,如车身控制、安全气囊、防抱死制动系统,电子稳定控制系统等。…

Unity2D 人物爬楼梯

unity3d 中 实现 2d角色爬梯子功能。_哔哩哔哩_bilibiliunity3d 中 实现 2d角色爬梯子功能。, 视频播放量 2598、弹幕量 3、点赞数 28、投硬币枚数 18、收藏人数 83、转发人数 19, 视频作者 Fss1975, 作者简介 &#xff0c;相关视频&#xff1a;寻路算法 在unity3d 中的演示&am…

repo将每个仓库回退到第一个commit的状态

文章目录 1. 获取所有仓库的列表2. 回退每个仓库到第一个 commit3. 确认状态注意事项 在使用 repo 和 git 管理 AOSP 代码时&#xff0c;如果你想将每个仓库都回退到其第一个 commit 的状态&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 获取所有仓库的列表 首先&…

Windows Python安装和配置教程

文章目录 一&#xff0c;下载方式&#xff08;一&#xff09;官网下载注&#xff1a;下载选项说明注&#xff1a;查看本机操作系统位数步骤 &#xff08;二&#xff09;网盘下载 二&#xff0c;安装三&#xff0c;测试安装效果&#xff08;一&#xff09;检测安装配置&#xff…

新书速览|Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)

《SpringSpring MVCMyBatis从零开始学&#xff08;视频教学版&#xff09;&#xff08;第3版&#xff09;》 1 本书内容 SSM是当前使用广泛的Java Web开发框架。《SpringSpring MVCMyBatis从零开始学&#xff08;视频教学版&#xff09;&#xff08;第3版&#xff09;》由浅入…

【福建医科大学附属第一医院-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

浅谈BIM+GIS在管廊机电监控与运维管控系统中的应用

文&#xff1a;安科瑞郑桐 摘要&#xff1a;本文提出了一种城市综合管廊监控与报警集成管控平台的架构&#xff0c;并对以BIMGIS为核心的系统功能进行了研究和分析&#xff0c;通过GIS实现对管廊整体及设备设施的全局定位及管理&#xff0c;利用BIM实现对管廊设备的空间定位&a…

第6篇:无线与移动网络

目录 引言 6.1 无线网络的基础概念 6.2 无线局域网&#xff08;WLAN&#xff09;与IEEE 802.11 6.3 蓝牙与无线个域网&#xff08;WPAN&#xff09; 6.4 无线城域网&#xff08;WMAN&#xff09;与WiMax 6.5 ZigBee与智能家居 6.6 移动蜂窝网络&#xff08;3G/4G/5G&…

SpringColoud GateWay 核心组件

优质博文&#xff1a;IT-BLOG-CN 【1】Route路由&#xff1a; Gateway的基本构建模块&#xff0c;它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真&#xff0c;则匹配到该路由。 Route路由-动态路由实现原理&#xff1a; 配置变化Apollo 服务地址实例变化…

AMD XILINX 20nm器件价格上调25%

随着市场回暖&#xff0c;台积电也在调整价格策略&#xff0c;近期台积电上调了20nm的出厂价格。 据相关消息显示&#xff0c;AMD为了保障持续的供货和服务&#xff0c;也计划将20nm器件的价格统一上调25%&#xff0c;预计将于11月发布正式的涨价通知&#xff0c;并于2025年Q1开…

七,Linux基础环境搭建(CentOS7)- 安装Scala和Spark

Linux基础环境搭建&#xff08;CentOS7&#xff09;- 安装Scala和Spark 大家注意以下的环境搭建版本号&#xff0c;如果版本不匹配有可能出现问题&#xff01; 一、Scala下载及安装 Scala是一门多范式的编程语言&#xff0c;一种类似java的编程语言&#xff0c;设计初衷是实现…

基于Java+SpringBoot+Vue的宠物咖啡馆平台的设计与实现

基于JavaSpringBootVue的宠物咖啡馆平台的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#…

ubuntu编译kaldi和vosk

文章目录 前言一、开源框架的选取二、kaldi编译三、编译vosk方案一方案二 前言 由于工作需要语音识别的功能&#xff0c;环境是在linux arm版上&#xff0c;所以想先在ubuntu上跑起来看一看&#xff0c;就找了一下语音识别的开源框架&#xff0c;选中了vosk这个开源库&#xf…

微软:全球每天网络攻击超6亿次

《2024年微软数字防御报告》揭示了一个复杂的全球网络安全格局&#xff0c;每天发生超过6亿次网络攻击。报告强调了勒索软件、网络钓鱼和身份泄露事件的增加&#xff0c;以及网络犯罪团伙和国家行为者之间的合作。它强调了人工智能在攻击和防御中的重要作用&#xff0c;敦促组织…