“启智杯”:IMvdImage类型转换为MFC的CBitmap类型
“启智杯”开发类命题-一种模板匹配与识别控件。若使用MFC开发该控件,则难免会面临使用CBitmap格式以操作图片的情况。本文以8位,1280*1024灰度图(MVD_PIXEL_MONO_08)、24位,3840*2160彩色图(MVD_PIXEL_RGB_RGB24_C3)为例,演示如何将IMvdImage转换为CBitmap类型,此操作不仅可以节省时间,更为重要的是此操作可以免去实现加载图片的功能。语言:C++。应用程序框架:MFC。位图绘制和图形绘制:GDI。

一.IMvdImage转CBitmap

1.初始化IMvdImage对象

IMvdImage* m_pOtherImage = nullptr; int nRet = CreateImageInstance(&m_pOtherImage); if (MVD_OK != nRet) { ShowErrorMsg(L"CreateImageInstance", 1); return; } m_pOtherImage->InitImage("E:\\vs work\\hk\\resource\\earth-3840x2160-clouds-4k-23359.jpg");

2.获取m_pOtherImage内的图像数据

//图像宽高数据 int iWidth = m_pOtherImage->GetWidth(); int iHeight = m_pOtherImage->GetHeight(); //获取图像格式 MVD_PIXEL_FORMAT pixelFormat = m_pOtherImage->GetPixelFormat(); /* */ MVD_IMAGE_DATA_INFO* temp = m_pOtherImage->GetImageData(); //为CBitmap申请的内存块将放在data里,8位、16位、24位位深的CBitmap无法被DC选入,因此要乘4来创建位深为32bit的CBitmap unsigned char* data = (unsigned char*)malloc(iWidth * iHeight * 4 * sizeof(char)); //根据pixelFormat复制值 switch (pixelFormat) { case MVD_PIXEL_MONO_08: { if (data != nullptr) { for (int i = 0; i < iWidth * iHeight; i++) { data[i * 4] = temp->stDataChannel[0].pData[i]; data[i * 4 + 1] = temp->stDataChannel[0].pData[i]; data[i * 4 + 2] = temp->stDataChannel[0].pData[i]; data[i * 4 + 3] = temp->stDataChannel[0].pData[i]; } } break; } case MVD_PIXEL_RGB_RGB24_C3: { if (data != nullptr) { for (int i = 0; i < iWidth * iHeight; i++) { //海康的RGB存储和CBitmap的RGB存储好像是反的 data[i * 4] = temp->stDataChannel[0].pData[i * 3 + 2]; data[i * 4 + 1] = temp->stDataChannel[0].pData[i * 3 + 1]; data[i * 4 + 2] = temp->stDataChannel[0].pData[i * 3]; data[i * 4 + 3] = 255; } } break; } default: break; } //实例化CBitmap对象并赋值 CBitmap* m_loadBitmap = new CBitmap(); m_loadBitmap->CreateBitmap(iWidth, iHeight, 1, 32, data); //使用CImage类保存创建的CBitmap对象,以查看是否成功转换 CImage img; img.Attach(*m_loadBitmap); img.Save(_T("aaa.bmp"));

3.结论

经过测试,转换后的CBitmap对象可被设备上下文(DC)选入以实现绘图,如图所示

8位,1280*1024灰度图(MVD_PIXEL_MONO_08)

1.PNG

24位,3840*2160彩色图(MVD_PIXEL_RGB_RGB24_C3)	

2.PNG

武汉理工大学,程惟康,2022-03-17;

版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

“启智杯”模板匹配控件的扇形掩膜实现方式交流

下一篇

"启智杯":确定扇环外切矩形的方法

评论请先登录 登录
全部评论 0
Lv.0
0
关注
4
粉丝
5
创作
23
获赞
所属专题
  • VM4.2二次开发环境配置方法(入门必看)
  • Visionmaster4.2 + QT5.14.2 + VS2017二次开发保姆级避坑课程
  • 使用VisionMaster4.2SDK联合C#进行二次开发入门
  • VM二次开发视觉框架(C#)
  • 二次开发过程注意的点
  • 开发一个自己的VM模块(三)
  • 开发一个自己的VM模块(二)
  • 开发一个自己的VM模块系列一:模块详解
  • 【VM集成开源AI】深度学习算子模块封装
  • Vm算子CMvdImage图片生成方法,即IntPtr转byte[]和byte[]
  • Sauvola二值化处理在图像处理应用的优势介绍分析
  • “启智杯”设计大赛-一种模板匹配建模与识别控件
  • “启智杯”模板匹配控件的扇形掩膜实现方式交流
  • “启智杯”:IMvdImage类型转换为MFC的CBitmap类型
  • "启智杯":确定扇环外切矩形的方法
  • VM二次开发小技巧-增加十字辅助线
  • VM二次开发小技巧—快速匹配模板切换
相关阅读
  • 探寻机器视觉新星|第二届“启智杯”机器视觉设计大赛获奖名单公布
    2024-04-08 浏览 0
  • VM4.4更新亮点
    2024-04-12 浏览 0
  • 第二届启智杯—光伏电池片质检视觉方案设计
    2024-04-15 浏览 0
  • 每日分享|3D视觉成像之双目立体视觉原理
    2024-03-21 浏览 0
  • 海康AMR应用场景中蜂鸣器的使用
    2024-04-03 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器