0
点赞
收藏
分享

微信扫一扫

什么是原生IP和广播IP

邯唐情感 04-07 10:30 阅读 2

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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时间。

举报

相关推荐

0 条评论