当前位置: 首页 > news >正文

C# :HImage转Mat方法

原来网上查过HImage转Mat的方式,本来想直接copy,奈何查到的总有不完美的地方,且最近还从之前的代码发现了bug后改掉了。

这段代码测试后可用,直接分享出来。
我的halcon版本是 17.12 后面新版本是否使用可以同步留言。
OpenCV是用的C# nugget包下拉的,这个根据个人.net Framework 版本做调整就好

 public Mat HImageToMat(HImage hImage){try{Mat mImage;HTuple htChannels;HOperatorSet.CountChannels(hImage, out htChannels);if (htChannels.Length == 0 || (htChannels[0].I != 1 && htChannels[0].I != 3))return null;HTuple width, height;hImage.GetImageSize(out width, out height);// 处理单通道图像if (htChannels[0].I == 1){HTuple ptr, type;HOperatorSet.GetImagePointer1(hImage, out ptr, out type, out _, out _);MatType cvType = GetCvType(type);mImage = new Mat(height, width, cvType);unsafe{byte* srcPtr = (byte*)ptr.IP;int step = (int)mImage.Step();for (int row = 0; row < height; row++){Buffer.MemoryCopy(srcPtr + row * width,mImage.DataPointer + row * step,step,width);}}return mImage;}// 处理三通道图像else{HTuple ptrR, ptrG, ptrB, type;HOperatorSet.GetImagePointer3(hImage, out ptrR, out ptrG, out ptrB, out type, out _, out _);MatType cvType = GetCvType(type);Mat[] channels = new Mat[3]{new Mat(height, width, cvType), // Bnew Mat(height, width, cvType), // Gnew Mat(height, width, cvType)  // R};unsafe{// 复制数据到各通道 (Halcon: R-G-B → OpenCV: B-G-R)CopyChannel(ptrB, channels[0], width, height); // BCopyChannel(ptrG, channels[1], width, height); // GCopyChannel(ptrR, channels[2], width, height); // R}mImage = new Mat();Cv2.Merge(channels, mImage);foreach (var channel in channels)channel.Dispose();return mImage;}}catch (Exception ex){throw new Exception("HImage转Mat失败", ex);}}

在这里插入图片描述

That 's all . Thank you.

http://www.xdnf.cn/news/613081.html

相关文章:

  • python与flask框架
  • 在App Store Connect上编辑多个用户的访问权限
  • leetcode hot100:十四、解题思路大全:真·大全!
  • openCV1-3 图像查找表与色彩表
  • 软考 组合设计模式
  • docker基础
  • 第36节:PyTorch基本张量操作
  • springboot配置mysql druid连接池,以及连接池参数解释
  • Python训练营打卡 Day24
  • CloudCanal RAG x Ollama 构建全栈私有 AI 服务
  • 1.2 控制系统的数学模型
  • 深入理解局域网内流量与链路监控的实战价值
  • 连续质数和
  • python web flask专题-Flask入门指南:从安装到核心功能详解
  • 比特授权云外壳加密支持Android 15!
  • DL00912-基于自监督深度聚类的高光谱目标检测含数据集
  • 大模型技术生态全景解析:从基础组件到AGI的演进之路
  • Flink初始及搭建集群环境(技术选型与实战详解)
  • 用AI工具创作出具有史诗感的神话故事短片
  • 制作一款打飞机游戏55:扩散
  • [GHCTF 2025]ret2libc1(NSSCTF)
  • Spring Bean的生命周期
  • 深度学习模型可视化:Netron的安装和使用
  • 深度学习-162-DeepSeek之调用远程大模型API接口参数结构分析
  • Socket 的两个不同含义:硬件 CPU Socket 和 网络 Socket 的区别
  • MySQL——复合查询表的内外连
  • 第十节第七部分:Arrays类、自定义排序规则Comparable、自定义比较器Comparator
  • PHP简介
  • DEEPSEEK + 其他工具的玩法
  • 深入剖析Go并发性能瓶颈:pprof实战指南