繁体   English   中英

OpenCV.js 无法将“未定义”转换为 int

[英]OpenCV.js cannot convert “undefined” to int

我正在使用 opencv.js 导入到 angular.json 中。 使用 Angular 9 中的 HTMLCanvasElement nativeelement,带有画布的某些功能可以正常工作。 但是,某些 Mat 实例的数据类型需要调整。 例如,当我必须将 4 通道矩阵转换为 3 通道矩阵时。

我尝试了简单的方法,通过使用

cv.cvtColor(dst, dst, cv.COLOR_RBGA2RGB);

但我在 Object.toWireType (opencv.js:21) 处收到错误“错误类型错误:无法将“未定义”转换为 int”

我正在使用 OpenCV.js 和

我的 canvas 上下文中的图像在加载后的原型如下所示:

ImageData {data: Uint8ClampedArray(1048576), width: 512, height: 512}
data: Uint8ClampedArray(1048576) [188, 192, …]
height: 512
width: 512
__proto__: ImageData

我猜这与 Angular 的类型检查有关,与否。 有没有办法让这个 function 工作,或者我可以创建一个新的 mat 实例并使用 javascript 元素修改这些指针? 还是我应该放弃尝试将其集成到 Angular 中?

减少通道不适用于 cvtColor 或 convertTo。 请参阅此处的文档https://docs.opencv.org/3.4/de/d06/tutorial_js_basic_ops.html

这是一些示例代码:

export function reduceMatChannels(parent: ImagecanvasComponent, canvasCtx_imgData: ImageData, targetChannels = 3): any  {
    const canvasCtx_imgData_Mat = parent.cv.matFromImageData(canvasCtx_imgData);
    let resMat = new parent.cv.Mat();
    let resImgVect = new parent.cv.MatVector();
    let rgbaPlanes = new parent.cv.MatVector();
    parent.cv.split(canvasCtx_imgData_Mat, rgbaPlanes);
    for (let i = 0; i < targetChannels; i++){
      resImgVect.push_back(rgbaPlanes.get(i));
    }
    parent.cv.merge(resImgVect, resMat);
//This is a custom class
    Mat.deleteMats([canvasCtx_imgData_Mat, resImgVect, rgbaPlanes]);
    return resMat;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM