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博客
相关文章:

QT 机器视觉 (3. 虚拟相机SDK、测试工具)
本专栏从实际需求场景出发详细还原、分别介绍大型工业化场景、专业实验室场景、自动化生产线场景、各种视觉检测物体场景介绍本专栏应用场景 更适合涉及到视觉相关工作者、包括但不限于一线操作人员、现场实施人员、项目相关维护人员,希望了解2D、3D相机视觉相关操作…...

1分钟解决Excel打开CSV文件出现乱码问题
一、编码问题 1、不同编码格式 CSV 文件有多种编码格式,如 UTF - 8、UTF - 16、ANSI 等。如果 CSV 文件是 UTF - 8 编码,而 Excel 默认使用的是 ANSI 编码打开,就可能出现乱码。例如,许多从网络应用程序或非 Windows 系统生成的 …...

基于SpringBoot+Vue的仓库管理系统【前后端分离】
基于SpringBootVue的仓库管理系统设计与实现 摘要 仓库管理系统在现代企业物流中具有重要作用,能够有效提高库存管理效率,优化资源配置。本系统采用Spring Boot作为后端框架,Vue作为前端框架,通过前后端分离的开发模式构建一个现代…...

vue和django接口联调
vue访问服务端接口 配置跨域 前端跨域 打开vite.config.js,在和resolve同级的地方添加配置。 proxy代表代理的意思 "/api"是以/api开头的路径走这个配置 target代表目标 changeOrigin: true,是开启跨域请求 rewrite是编辑路径。 (path) > pa…...

2-141 怎么实现ROI-CS压缩感知核磁成像
怎么实现ROI-CS压缩感知核磁成像,这个案例告诉你。基于matlab的ROI-CS压缩感知核磁成像。ROI指在图像中预先定义的特定区域或区域集合,选择感兴趣的区域,通过减少信号重建所需的数据来缩短信号采样时间,减少计算量,并在…...

开源库 FloatingActionButton
开源库FloatingActionButton Github:https://github.com/Clans/FloatingActionButton 这个库是在前面这个库android-floating-action-button的基础上修改的,增加了一些更强大和实用的特性。 特性: Android 5.0 以上点击会有水波纹效果 可以选择自定义…...

技术选型不当对项目的影响与补救措施
在项目管理中,初期技术选型与项目需求不匹配的情况并不罕见,这可能导致项目延误、成本增加和最终成果的不理想。补救的关键措施包括:重新评估技术选型、加强团队沟通、实施有效的需求管理以及建立持续的反馈机制。其中,重新评估技…...

Spring的核心类: BeanFactory, ApplicationContext 笔记241103
Spring的核心类: BeanFactory, ApplicationContext, ConfigurableApplicationContext, WebApplicationContext, WebServerApplicationContext, ClassPathXmlApplicationContext, FileSystemXmlApplicationContext, XmlWebApplicationContext, AnnotationConfigServletWebServer…...

UE5移动端主要对象生命周期及监听
1、GameInstance 1、首先加载GameInstance,全局唯一,切换Map也是唯一的,用于做一些全局操作,比如监听Map加载,监听App进入前台、退出后台 // Fill out your copyright notice in the Description page of Project Settings.#include "Core/Base/MyGameInstance.h&q…...

LLM | 论文精读 | CVPR | SelTDA:将大型视觉语言模型应用于数据匮乏的视觉问答任务
论文标题:How to Specialize Large Vision-Language Models to Data-Scarce VQA Tasks? Self-Train on Unlabeled Images! 作者:Zaid Khan, Vijay Kumar BG, Samuel Schulter, Xiang Yu, Yun Fu, Manmohan Chandraker 期刊:CVPR 2023 DOI…...

kafka里的consumer 是推还是拉?
大家好,我是锋哥。今天分享关于【kafka里的consumer 是推还是拉?】面试题?希望对大家有帮助; kafka里的consumer 是推还是拉? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中,消费者&…...

针对物联网边缘设备基于EIT的手部手势识别的1D CNN效率增强的组合模型压缩方法
论文标题:Combinative Model Compression Approach for Enhancing 1D CNN Efficiency for EIT-based Hand Gesture Recognition on IoT Edge Devices 中文标题:针对物联网边缘设备基于EIT的手部手势识别的1D CNN效率增强的组合模型压缩方法 作者信息&a…...

商品满减、限时活动、折扣活动的计算最划算 golang
可以对商品的不同活动(如满减、限时价和折扣)进行分组,并在购物车中显示各个活动标签下的最优价格组合。以下代码将商品按活动类别进行分组计算,并输出在购物车中的显示信息。 package mainimport ("fmt""math&qu…...

vue3 + ts + element-plus 二次封装 el-table
一、实现效果: (1)数据为空时: (2)有数据时:存在数据合并;可自定义表头和列的内容 (3)新增行: (4)删除行: &a…...

python传递json参数给php
python传递json参数给php 在Python中,你可以使用requests库来发送JSON数据给一个PHP脚本。以下是一个简单的例子: 首先,安装requests库(如果你还没有安装的话): pip install requests 然后,…...

2.若依vue表格数据根据不同状态显示不同颜色style
例如国标显示蓝色,超标是红色 使用是蓝色,未使用是绿色 <el-table-column label"外卖配送是否完成评价" align"center" prop"isOverFlag"> <template slot-scope"scope"> …...

JZ2440开发板——LCD
以下内容源于韦东山嵌入式课程的学习与整理,如有侵权请告知删除。 之前在博文中学习过LCD(SoC是S5PV210),作为对比,本文学习S3C2440这款SoC的LCD方面的内容。主要涉及以下三个内容: 一、LCD的硬件原理 1.…...

YOLOv6-4.0部分代码阅读笔记-yolo_lite.py
yolo_lite.py yolov6\models\yolo_lite.py 所需的库和模块 #!/usr/bin/env python3 # -*- coding:utf-8 -*- import math import torch import torch.nn as nn import torch.nn.functional as F from yolov6.layers.common import * from yolov6.utils.torch_utils import i…...

奇瑞汽车:降阶模型在新能源汽车热管理仿真上的应用
随着新能源汽车的发展,对仿真技术的要求也越来越高。那么奇瑞汽车利用降阶模型在新能源汽车热管理仿真上做了哪些应用呢?本次内容主要从四个方面展开介绍: 1、 奇瑞汽车简介; 2、 热管理降阶模型开发的背景; 3、 高低…...

传统的自然语言处理评估指标
目录 传统的自然语言处理评估指标 EM(Exact Match) BLEU(Bilingual Evaluation Understudy) 传统的自然语言处理评估指标 传统评估指标 EM(Exact Match) 计算方式:如果生成的答案与参考答案完全相同(字符级完全匹配),则 EM 得分为 1,否则为 0。这是一种比较严格的…...

WPF+MVVM案例实战(十七)- 自定义字体图标按钮的封装与实现(ABC类)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、案例效果1、按钮分类2、ABC类按钮实现1、文件创建2、字体图标资源3、自定义依赖属性4、按钮特效样式实现 3、按钮案例演示1、页面实现与文件创建2、依赖注入3 运…...

Redis数据结构:List类型全面解析
文章目录 一、List数据类型1.1 简介1.2 应用场景1.3 底层结构 二、数据结构2.1 压缩列表ZipList2.2 双向链表LinkedList(后续已废弃)2.3 快速链表QuickList 三、List常见命令 一、List数据类型 1.1 简介 详细介绍:Redis五种数据类型、Strin…...

人工智能证书合集
本文将对目前市面上主流官方机构颁发的人工智能证书进行整理和介绍,由于整理的证书较多,本文共一万八千多字,请根据自己的考证需求阅读对应部分的内容,希望本文对人工智能行业的从业人员和计划从事人工智能相关岗位工作的人员有所…...

php开发实战分析(8):优化MySQL分页查询与数量统计,提升数据库性能
在开发过程中,我们遇到了一段用于从数据库中查询部门信息的PHP代码。该代码负责根据不同的条件(如部门名称和来源)筛选数据,并返回分页结果及总记录数。然而,原始代码存在一些问题,包括重复的查询条件构建逻…...

shell脚本案例:RAC配置多路径时获取磁盘设备WWID和磁盘大小
使用场景 在RAC配置多路径时,需要获取到磁盘设备的wwid。因为RAC的磁盘配置是提前规划好的,只知道wwid,不知道磁盘对应大小,是不知道应该如何配置多路径的mutipath.conf文件的;而凭借肉眼手工去对应磁盘设备的wwid和大…...

Android Framework AMS(10)广播组件分析-1
该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读应用层广播组件的发送广播和接收处理广播 2个过程,以及从APP层到AMS调用之间的打通。关注思维导图中左上部分即可。 有…...

在 Node.js 中使用 .env 文件
什么是 .env 文件? 文件.env是包含环境变量键值对的简单文本文件。此文件的内容不会被签入源代码管理,从而确保敏感数据的安全。 示例 PORT 4000 DATABASE_URL mongodb://localhost: 27017 /mydb API_KEY abcd1234 NODE_ENV development 在 Node.…...

CesiumJS 案例 P19:添加矩形、监听鼠标左击、监听鼠标右击、监听鼠标移动
CesiumJS CesiumJS API:https://cesium.com/learn/cesiumjs/ref-doc/index.html CesiumJS 是一个开源的 JavaScript 库,它用于在网页中创建和控制 3D 地球仪(地图) 一、添加矩形 <!DOCTYPE html> <html lang"en&…...

路测毫米波雷达标定和目标跟踪
1 2 3 4 5 6 查找匹配时,先对数据排序。逐帧对数据处理,运行速度快。单帧有噪点,多帧处理,准确率更高一些。 7 8 9 10 参考 路侧毫米波雷达标定与目标跟踪哔哔哩_bilibili路侧毫米波雷达标定与目标跟踪, 视频播放量 5855、弹幕量…...

【sqlmap使用手册-持续更新中】
SQLMap 简介 SQLMap 是一个开源的渗透测试工具,用于自动化检测和利用 SQL 注入漏洞。它支持多种数据库,包括 MySQL、PostgreSQL、Oracle、SQL Server 等。 可以通过以下命令安装sqlmap git clone https://github.com/sqlmapproject/sqlmap.git最常用的…...