开发环境:VS2015+Qt5.8,以官方所给asynchronousopencvrecorder的demo为例。

核心代码初解:

获取相机

VmbErrorType err = m_ApiController.StartUp();

初始化某个相机参数,m_cameras为列表容器,nRow为int,可以手动设置。

err = m_ApiController.StartContinuousImageAcquisition(m_cameras[nRow]);

以上函数关键代码,设置FPS,曝光时间,ROI区域等,更多的可以通过相机软件保存相机参数,到参数文件里面找相应的特征名。

     m_FPS = 100.0;FeaturePtr pFeatureFPS ;res = SP_ACCESS( m_pCamera )->GetFeatureByName("AcquisitionFrameRateAbs", pFeatureFPS);if( VmbErrorSuccess != res){res = SP_ACCESS( m_pCamera )->GetFeatureByName("AcquisitionFrameRate", pFeatureFPS);}if( VmbErrorSuccess == res ){res = SP_ACCESS(pFeatureFPS)->GetValue( m_FPS );}m_exposure = 2200.0;FeaturePtr pFeature_exposure;res = SP_ACCESS(m_pCamera)->GetFeatureByName("Exposure Time", pFeature_exposure);if (VmbErrorSuccess != res){res = SP_ACCESS(m_pCamera)->GetFeatureByName("ExposureTimeAbs", pFeature_exposure);}if (VmbErrorSuccess == res){res = SP_ACCESS(pFeature_exposure)->SetValue(m_exposure);}    FeaturePtr offset_x;res = SP_ACCESS(m_pCamera)->GetFeatureByName("OffsetX", offset_x);if (VmbErrorSuccess == res){res = SP_ACCESS(offset_x)->SetValue(m_offset_x);}FeaturePtr offset_y;res = SP_ACCESS(m_pCamera)->GetFeatureByName("OffsetY", offset_y);if (VmbErrorSuccess == res){res = SP_ACCESS(offset_y)->SetValue(m_offset_y);}

图片大小可在ApiController.h里面设置

    VmbInt64_t    m_nWidth = 360;VmbInt64_t    m_nHeight = 180;

python用于inceptionv 3分类,c++用于产生图片。为了节约开发时间,c++将图片写入固定目录,然后python读取固定目录检测,为了两边线程的安全,用了比较蠢的办法:读取txt!两边同时判断。隐掉的部分可用于格式化批量保存图片。

void AsynchronousOpenCVRecorder::OnFrameReady(int status)
{if (true == m_bIsStreaming){// Pick up frameFramePtr pFrame = m_ApiController.GetFrame();if (SP_ISNULL(pFrame)){Log("frame pointer is NULL, late frame ready message");return;}// See if it is not corruptif (VmbFrameStatusComplete == status){if (!m_pVideoRecorder.isNull()){m_pVideoRecorder->enqueueFrame(*pFrame);}VmbUchar_t *pBuffer;VmbErrorType err = SP_ACCESS(pFrame)->GetImage(pBuffer);if (VmbErrorSuccess == err){VmbUint32_t nSize;err = SP_ACCESS(pFrame)->GetImageSize(nSize);if (VmbErrorSuccess == err){VmbPixelFormatType ePixelFormat = m_ApiController.GetPixelFormat();if (!m_Image.isNull()){QFile f1("test.txt");f1.open(QIODevice::Text | QIODevice::ReadOnly);if (f1.readLine() == QByteArray("0")){f1.close();CopyToImage(pBuffer, ePixelFormat, m_Image);cv::Mat mat;mat = cv::Mat(m_Image.height(), m_Image.width(), CV_8UC3, (void*)m_Image.constBits(), m_Image.bytesPerLine());/*char image[128];n++;sprintf(image, "F:/new/new_wet2_%d%s",n, ".jpg");bool mark = cv::imwrite(image ,mat);*/bool mark=cv::imwrite("C://Users//惠普//Desktop//磁瓦检测项目1//class_transfer_learning//test.jpg", mat);if (mark){const QSize s = ui.m_LabelStream->size();ui.m_LabelStream->setPixmap(QPixmap::fromImage(m_Image).scaled(s, Qt::KeepAspectRatio));QFile f2("test2.txt");f2.open(QIODevice::Text | QIODevice::ReadOnly);if (f2.readLine() == QByteArray("0")){ui.label_4->setText(QString::fromLocal8Bit("不正常"));}else{ui.label_4->setText(QString::fromLocal8Bit("正常"));}//Sleep(100);QFile f("test.txt");QString b = "1";f.open(QIODevice::Text | QIODevice::ReadWrite);f.write(b.toLatin1(), b.length());f.close();}}}}}}else{// If we receive an incomplete image we do nothing but loggingLog("Failure in receiving image", VmbErrorOther);}// And queue it to continue streamingm_ApiController.QueueFrame(pFrame);}
}

开启视频录制线程:

    m_pVideoRecorder = OpenCVRecorderPtr(new OpenCVRecorder("AsynchronousOpenCVRecorder.avi", FPS, Width, Height));m_pVideoRecorder->start();

线程核心代码:

     while( ! m_StopThread ){FrameStorePtr tmp;{// two class events unlock the queue// first if a frame arrives enqueueFrame wakes the condition// second if the thread is stopped we are woken up// the while loop is necessary because a condition can be woken up by the systemQMutexLocker local_lock( &m_ClassLock );while(! m_StopThread && m_FrameQueue.empty() ){m_FramesAvailable.wait( local_lock.mutex() );}if( ! m_StopThread){tmp = m_FrameQueue.front();m_FrameQueue.pop_front();}}// scope for the lock, from now one we don't need the class lockif( ! m_StopThread){convertImage( *tmp );m_VideoWriter << m_ConvertImage;}}

VS+QT exe图标问题:

在Qt Designer里面

这样虽然UI有图标了,但是生成exe却没有。
新建一个.rc文件,写入

IDI_ICON1 ICON DISCARDABLE "AVT.ico"

并把.rc和.ico添加到工程里面即可

软件自启动:

找到VS的输出路径,添加相应的dll文件,双击exe文件确认是否可以运行,再发送到桌面快捷方式,这个时候进入 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 路径(win10),把快捷方式拖到里面就可以了。

AVT Mako/Manta面阵相机开发小结相关推荐

  1. Halcon面阵相机采像

    这里写自定义目录标题 Halcon面阵相机采像 相机的搜索与枚举 打开相应的相机 图像的采集 Halcon面阵相机采像 对于一般的摄像头或网口面阵相机Halcon通过其自带的函数进行采像非常便捷,对于 ...

  2. 使用面阵相机进行传送带视频流的拼接

    注:根据实验室规定,本文所有用到的方法,只讲原理不贴代码,所有照片,必要的地方马赛克处理. 背景 在工业应用中,使用面阵相机识别传送带上的物体,当要识别的目标的最小包围矩形(不是最小包围旋转矩形)小于 ...

  3. 游戏开发小结——通过射线投射来创建子弹孔

    游戏开发小结--通过射线投射来创建子弹孔 实现目标:通过射线投射来创建子弹孔. 在进行任何操作之前,我将创建一个UI画布,其中包含一个图像组件,然后将准星sprite添加到资源中. 首先,我将创建三个 ...

  4. 线阵相机和面阵相机的区别及应用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 随着全球工业4.0概念的兴起和智能制造的发展,机器视觉技术正快速应 ...

  5. 相机开发:海康板卡相机开发

    海康相机开发 板卡相机开发IO设置 参数保存 板卡相机开发IO设置 https://my.oschina.net/u/4322890/blog/4260926 参数保存 https://blog.cs ...

  6. 机器视觉:工业线阵相机与面阵相机特点分析

    工业线阵相机与面阵相机特点分析 线阵相机与面阵相机的基本区别 1.类型区分 2.应用对比 3.优点对比: 4.缺点对比: 线阵相机与面阵相机的选型 线阵摄像机(线阵工业相机)的选型 线阵镜头的选型 线 ...

  7. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对 IM 开发做一个全面的总结. 相关推荐阅读:. Android即时通讯 ...

  8. android之相机开发

     http://blog.csdn.net/jason0539/article/details/10125017 android之相机开发 分类: android 基础知识2013-08-20 22: ...

  9. STM32——库函数开发小结

    STM32--库函数开发小结 宗旨:技术的学习是有限的,分享的精神是无限的. 基本上所有外设都有以下几类寄存器:[CR/DR/SR] (1)控制寄存器 xxx_CR(Control/Configura ...

最新文章

  1. 简述机器指令与微指令之间的关系_自考《计算机组成原理》模拟试题(一)
  2. phpcms_v9推送到其他栏目后再在其他栏目删除导致数据库出错
  3. c++ lambda 重载_您会后悔对Lambdas应用重载!
  4. 天猫服务系统的架构和经验
  5. 为什么选择Cassandra
  6. 十一假期朋友圈鄙视链,你在第几层?
  7. mysql jsp分页技术_一个非常简单的分页技术MYSQL JSP 利用了mysql的LIMIT参数
  8. 矩阵标准型的系数是特征值吗_「线性代数」根据特征值,将二次型化为标准形、规范形...
  9. 火车头采集器php,火车头采集器3.0采集图文教程
  10. 小巧时尚的机械键盘,通吃五台设备,雷柏MT510PRO键盘体验
  11. type-c速度测试软件,Type-C读写速度太慢 你真的使用了正确的方法了吗
  12. 重整旗鼓学java之java基础
  13. 密码子偏好性分析~codonW,EMBOSS:CUSP(图文教程)
  14. mysql-router设置,mysql router 中间件 配置
  15. BIM的真正基础是模型质量!
  16. 【ArcGIS】关于剔除DEM中的异常值(上)
  17. 2020年中南大学研究生招生夏令营机试题
  18. MavLink简单使用
  19. 一起Talk Android吧(第三百八十二回:UI框架)
  20. orange Pi3解码能力测试

热门文章

  1. 设计师常用软件合集,有一个你肯定知道!
  2. LocalDateTime获取服务器当前时间----24小时与12小时
  3. uvc摄像头代码解析之描述符
  4. 如何用word 2007在指定页插入页码和页眉页脚?
  5. 【总结】python sklearn模型中random_state参数的意义
  6. ORB-SLAM2详解(四)跟踪
  7. AIoT系列:AI赋能物联网,探索AIoT发展新趋势
  8. Mac查看OpenGL版本
  9. ArduPilot开源飞控系统之简单介绍
  10. 国内有什么好的前端学习网站推荐?