VisionMaster使用OpenCV发现的问题

VisionMaster 4.3 ImageData 属性拼写错误问题

1. 问题现象

在 VisionMaster 4.3 版本的脚本模块中,编写 C# 代码处理图像时,访问 ImageData 对象的宽度属性 Width 正常,但访问高度属性 Height 时,编译器报错:

Line:129 -- Error:"Script.Methods.ImageData"不包含"Height"的定义,并且找不到可接受类型为"Script.Methods.ImageData"的第一个参数的扩展方法"Height"(是否缺少 using 指令或程序集引用?)

2. 问题根源

这是一个官方 SDK 中的拼写低级错误 。在 VM 4.3 的早期及特定补丁版本中,内部定义 ImageData 类时,将代表高度的单词 Height 错误地拼写成了 Heigth (字母 th 顺序颠倒了)。

  • 标准拼写: Height
  • VM 4.3 拼写: Heigth

3. 影响范围

  • 涉及版本:VisionMaster 4.3.x 及其相关的 C# 脚本开发环境。
  • 涉及类:Script.Methods.ImageData

🛠️ 解决办法

方案一:遵循"错误的"正确拼写(最直接)

在代码中将所有 img.Height 替换为 img.Heigth。这是最快速通过编译的方法。

C# 复制代码
// 错误示例 (标准拼写在 VM 4.3 报错)
// mat = new Mat(img.Height, img.Width, MatType.CV_8UC1);

// 正确示例 (适配 VM 4.3 拼写)
mat = new Mat(img.Heigth, img.Width, MatType.CV_8UC1);

方案二:多版本兼容处理(推荐)

如果你希望代码能够在不同版本的 VM(如修复了拼写错误的 4.4+ 版本)中通用,可以使用 C# 的 dynamic 关键字反射 来动态获取属性,避开编译时的强类型检查。

c# 复制代码
// 使用 dynamic 避开编译期检查
dynamic dynamicImg = img;
int actualHeight = 0;

try {
    actualHeight = dynamicImg.Heigth; // 尝试 4.3 的拼写
} catch {
    actualHeight = dynamicImg.Height; // 如果报错,尝试标准拼写
}

方案三:封装扩展方法

通过编写一个简单的辅助函数来统一管理高度属性的读取,确保代码的可读性。

c# 复制代码
public int GetVMHeight(ImageData img) {
    // 优先适配 4.3 的 Heigth
    return img.Heigth; 
}

修正后的完整代码片段

修正如下:

c# 复制代码
public Mat ImageDataToMat(ImageData img)
{
    Mat mat = null;
    switch (img.PixelFormat)
    {
        case ImagePixelFormate.MONO8:
            // 使用 VM 4.3 特有的 Heigth 拼写
            mat = new Mat(img.Heigth, img.Width, MatType.CV_8UC1);
            Marshal.Copy(img.Buffer, 0, mat.Ptr(0), img.Buffer.Length);
            break;
        case ImagePixelFormate.RGB24:
            // 使用 VM 4.3 特有的 Heigth 拼写
            mat = new Mat(img.Heigth, 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;
}
相关推荐
石榴树下的七彩鱼4 小时前
图片修复 API 接入实战:网站如何自动去除图片水印(Python / PHP / C# 示例)
图像处理·后端·python·c#·php·api·图片去水印
忒可君5 小时前
C# winform 自制分页功能
android·开发语言·c#
南無忘码至尊5 小时前
Unity学习90天 - 第 6天 - 学习协程 Coroutine并实现每隔 2 秒生成一波敌人
学习·unity·c#·游戏引擎
何以解忧唯有撸码9 小时前
玩转控件:封装个带图片的Label控件
c#·winform·自定义控件·封装控件·控件扩展
xiaoshuaishuai810 小时前
C# 实现百度搜索算法逆向
开发语言·windows·c#·dubbo
深兰科技10 小时前
深兰科技与淡水河谷合作推进:矿区示范加速落地
java·人工智能·python·c#·scala·symfony·深兰科技
我是唐青枫13 小时前
C#.NET ObjectPool 深入解析:对象复用、池化策略与使用边界
c#·.net
无垠的广袤14 小时前
【“星睿O6”AI PC开发套件评测】基于 OpenClaw 的物体识别
linux·人工智能·opencv·摄像头·openclaw
aq553560014 小时前
Laravel2.x:被遗忘的PHP框架遗珠
开发语言·汇编·c#
光泽雨14 小时前
c#对object sender ,EventArgs e 的解释
开发语言·c#