You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenCVSharp中将Array2D<byte>转换为InputArray以实现图像缩放?

在OpenCVSharp中转换Array2D到InputArray/OutputArray的方法

嘿,我来帮你搞定这个缩放时的类型转换问题!其实在OpenCVSharp里,Array2D<byte>和InputArray/OutputArray的转换非常直观,甚至很多时候不需要手动写转换代码——因为库已经帮我们实现了隐式转换。不过还是得注意正确的用法,避免踩坑。

核心要点

  • Array2D<byte>可以**直接作为InputArray**传入Cv2.Resize这类方法,不需要额外转换,OpenCVSharp会自动处理。
  • 对于OutputArray(也就是缩放后的图像scaledImg),有两种常见的处理方式:

方式1:让Resize自动创建输出图像

如果你不想提前初始化scaledImg,可以直接给第二个参数传null,方法会自动根据你指定的尺寸创建并返回缩放后的Array2D<byte>对象:

Array2D<byte> img; // 假设这是你的原始图像
double imgScale = 0.5; // 示例缩放比例,可根据需求调整
Size newSize = new Size((int)(img.Columns * imgScale), (int)(img.Rows * imgScale));

// 直接获取返回的缩放图像
Array2D<byte> scaledImg = Cv2.Resize(img, null, newSize);

方式2:提前初始化输出图像

如果你想自己控制scaledImg的初始化,可以先创建对应尺寸的Array2D<byte>,再传入Resize方法:

Array2D<byte> img;
double imgScale = 0.5;
Size newSize = new Size((int)(img.Columns * imgScale), (int)(img.Rows * imgScale));

// 先初始化输出图像的尺寸
Array2D<byte> scaledImg = new Array2D<byte>(newSize.Height, newSize.Width);
// 执行缩放,结果会写入scaledImg
Cv2.Resize(img, scaledImg, newSize);

特殊场景:显式转换(极少需要)

如果遇到某些重载方法需要明确的InputArray类型(这种情况很少见),你可以用InputArray.Create()方法手动包装:

Cv2.Resize(InputArray.Create(img), scaledImg, newSize);

为什么你的原代码可能报错?

如果你的scaledImg在调用Resize前没有被初始化,直接传入的话,OpenCVSharp无法确定输出数组的尺寸,就会抛出错误。所以要么让方法自动创建(传null),要么提前初始化好尺寸。

内容的提问来源于stack exchange,提问作者daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:01:24