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。这是一种比较严格的…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...