[英]Uncaught TypeError: Cannot convert "undefined" to int in Opencv.js
[英]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.