vm4.4脚本图像ImageData与OpenCVMat互转
如题

优化自VM图像类型转换专题(C#篇),易读且好用。

社区的代码展示没有高亮,加上图片便于阅读。

carbon.png

注意如果是 vm 4.3 版本,ImageData 的高度属性的名字是 Heigth 😅


附上代码文字便于黏贴。

public ImageData MatToImageData(Mat mat) { ImageData img = new ImageData(); byte[] buffer = new Byte[mat.Width * mat.Height * mat.Channels()]; Marshal.Copy(mat.Ptr(0), buffer, 0, buffer.Length); switch (mat.Channels()) { case 1: img.Buffer = buffer; img.Width = mat.Width; img.Height = mat.Height; img.PixelFormat = ImagePixelFormate.MONO8; break; case 3: for (int i = 0; i < buffer.Length - 2; i += 3) { byte temp = buffer[i]; buffer[i] = buffer[i + 2]; buffer[i + 2] = temp; } img.Buffer = buffer; img.Width = mat.Width; img.Height = mat.Height; img.PixelFormat = ImagePixelFormate.RGB24; break; default: throw new Exception(string.Format("Unsupported channels: {0}", mat.Channels())); } return img; } public Mat ImageDataToMat(ImageData img) { Mat mat = null; switch (img.PixelFormat) { case ImagePixelFormate.MONO8: mat = new Mat(img.Height, img.Width, MatType.CV_8UC1); Marshal.Copy(img.Buffer, 0, mat.Ptr(0), img.Buffer.Length); break; case ImagePixelFormate.RGB24: mat = new Mat(img.Height, img.Width, MatType.CV_8UC3); Marshal.Copy(img.Buffer, 0, mat.Ptr(0), img.Buffer.Length); Cv2.CvtColor(mat, mat, ColorConversionCodes.RGB2BGR); break; default: throw new Exception("Unsupported vm-script img format!"); } return mat; }
版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

[算法模块]模板建模界面开发及联调

下一篇

用脚本添加图片保存路径

评论请先登录 登录
全部评论 1
yao0 作者

FAQ-专题-图像转换 6 Mat 与脚本图像(ImageData)互转中也有这块代码,但 ImageDataToMat 实现得有问题。

2025-03-18 14:31:36 山东省
回复
  • 1
Lv.0
0
关注
0
粉丝
0
创作
0
获赞
相关阅读
  • 现场运维异常处理手册
    2025-04-02 浏览 0
  • 海康移动机器人实施运维工程师认证资料目录
    2025-04-15 浏览 0
  • 【VM实现Halcon例程】光度立体法缺陷检测
    2025-04-17 浏览 0
  • 关节机器人防护分类分享
    2025-04-15 浏览 0

请升级浏览器版本

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

推荐使用以下浏览器