上位机图像处理和嵌入式模块部署(qmacvisual实时视频)

news/2024/7/21 7:35:32 标签: 图像处理, 音视频, opencv

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们测试和练习的时候,大部分情况下都是利用图像进行测试的,但是实际情况下,或者准确一点说,工业场景下面,大部分测试都是通过工业摄像头实时进行处理的。所以,这里面就会涉及到实时视频采集的问题。然后尽管一开始的时候,我们是希望可以在qmacvisual里面添加必要的代码,然后实现视频的输出。

        实际运行中,发现如果这样做,修改的代码较多。或者说,这么做可能会破坏之前代码的稳定性,有点得不偿失,即使要修改可以后面慢慢修改。考虑再三,还是使用插件的方法来处理,这样比较妥当一点。最最主要的是,不需要修改作者之前的代码,这样运行上面容易debug很多。

1、使用笔记本自带的摄像头

        目前我们手上没有相关的工业相机,虽然将来这部分是少不了的,但是目前来说,还是能省一点算一点。所以,我们打算直接用opencv访问笔记本的摄像头。首先,可以编写对应的python代码,

import cv2

cap = cv2.VideoCapture(0)
if not cap.isOpened():
    print("Unable to open the camera")
    exit()

while True:
    ret, frame = cap.read()

    if not ret:
        print("Unable to get frame")
        break

    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

2、创建工程和创建流程

        创建工程和创建流程是使用qmacvisual的前提,做好了这一点,其他的就比较容易了。

3、修改ExtLibraryCase代码

        大家修改代码的时候千万不要修改ExtensionLibrary这个工程。简单地说,前者是插件,后者这是插件的容器而已。修改的函数主要也是frmExtLibraryCase::RunToolPro这个函数。首先,我们需要函数外定义一下全局变量,

#include <opencv2/opencv.hpp>
static int imgState = 0;
cv::VideoCapture* pHandle = NULL; // (*pHandle).release()

        接着注释掉RunToolPro里面的部分函数内容,直接替换上我们自定义的摄像头采集函数就可以了,这一步不复杂,和python里面的流程是非常类似的,

if (imgState == 0)
{
    imgState = 1;
    pHandle = new  cv::VideoCapture(0);
}

(*pHandle) >> dstImage;

        这个dstImage就是最终插件送出去的结果。

4、测试和验证

        因为插件本身需要一个输入图像,虽然从camera读取的角度来说,是根本不需要这个输入的,但是这也是没办法。所以要进行测试和验证,最起码要三个插件,第一个是图像读取;第二个是插件;第三个是图像显示。

        整个流程选择循环模式,就可以看到对应的视频流效果了。

        当然最终部署的时候肯定还是工业摄像头为主,这种方法只是验证了camera视频流获取的一个可行性。如果说有缺陷的话,就是一开始的时候浪费了十几ms时间。


http://www.niftyadmin.cn/n/5473343.html

相关文章

77、WAF攻防——权限控制代码免杀异或运算变量覆盖混淆加密传参

文章目录 WAF规则webshell免杀变异 WAF规则 函数匹配 工具指纹 webshell免杀变异 php 传参带入 eval可以用assert来替换,assert也可以将字符串当作php代码执行漏洞 php 变量覆盖 php 加密 使用加密算法对php后门进行加密 php 异或运算 简化:无字符webshellP 无数字字母rc…

沐瞳科技一面 客户端开发(45min)

自我介绍 Unity编译方式&#xff08;Mono与IL2CPP区别&#xff09; C#值类型和引用类型的区别 ref和out参数区别 C#装拆箱 C#委托与接口 Unity项目问答 合批了解吗 行为树与状态机的差异 对象池实现 对象池解决了什么问题 熟悉哪些设计模式 观察者模式讲讲 事件管…

008 CSS盒子模型

文章目录 盒子模型内容-宽度和高度内边距-padding边框-border圆角-border-radius 外边距-margin上下margin的传递上下margin的折叠块级元素的水平居中行内级元素(包括inline-block元素)的水平居中 外轮廓-outline盒子阴影-box-shadow文字阴影-text-shadow行内非替换元素的特殊性…

YoloV8实战:使用YoloV8实现水下目标检测(RUOD)

摘要 水下目标检测技术在生态监测、管道检修、沉船捕捞等任务中发挥着重要作用。常用的检测方法包括高清视像、侧扫声呐等。光学图像检测因高分辨率和灵活性&#xff0c;在近距离检测中优势显著。但水下图像受水体吸收、衰减、光源分布等影响&#xff0c;呈现蓝绿色&#xff0…

机器学习笔记 - 文字转语音技术路线简述以及相关工具不完全清单

一、TTS技术简述 今天的文本到语音转换技术(TTS)的目标已经不仅仅是让机器说话,而是让它们听起来像不同年龄和性别的人类。通常,TTS 系统合成器的质量是从不同方面进行评估的,包括合成语音的清晰度、自然度和偏好,以及人类感知因素,例如可理解性。 1、技术路线 (1)基…

Linux网卡IP地址配置错误的影响

在Linux系统中&#xff0c;网络配置是保持系统顺畅运行的关键一环。正确配置网卡的IP地址对于确保网络通信的准确性和效率至关重要。然而&#xff0c;如果在这个过程中发生错误&#xff0c;可能会带来一系列问题。让我们一起探讨一下&#xff0c;如果Linux网卡的IP地址配置错误…

Tomcat管理配置

Tomcat管理配置 1 host-manager项目2 manager项目 Tomcat 提供了Web版的管理控制台&#xff0c;位于webapps目录下。Tomcat 提供了用于管理Host的host-manager和用于管理Web应用的manager。 1 host-manager项目 Tomcat启动之后&#xff0c;可以通过 http://localhost:8080/ho…

Lecture 1~3 About Filter

文章目录 空间域上的滤波器- 线性滤波器盒状滤波器Box Filter锐化Sharpening相关运算 vs. 卷积运算 Correlation vs. Convolution - 非线性滤波器高斯滤波器Gaussian filter - 实际问题- 纹理texture 频域上的滤波器 滤波的应用- 模板匹配- 图像金字塔 空间域上的滤波器 图像…