如何在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
相关产品推荐
相关产品推荐

