我正在尝试检测矩形形状和蓝色目标,但是当我尝试运行此代码时,出现了一些错误。我是否错过任何代码,请指导我,我正在使用 opencv.js
(javascript).
我尝试过这个。
function findMarker(video){
let gray = cv.cvtColor(video, cv.COLOR_RGBA2GRAY);
let blur = cv.blur(gray, ksize, anchor, cv.BORDER_DEFAULT); // blur the image to avoids noise
let edges = cv.Canny(blur, 50, 100, 3, false); // black and white border
let cnts = cv.findContours(edges.copy(), cv.RETR_CCOMP, cv.CHAIN_APPROX_SIMPLE);
c = max(cnts, key = cv.contourArea);
return cv.minAreaRect(c);
}
错误代码
BindingError {name: "BindingError", message: "Function 'cvtColor' called with an invalid number … arg0Wired, arg1Wired, arg2Wired, arg3Wired);↵})!", stack: "BindingError: Function 'cvtColor' called with an i…20OpenCV%20js/utils.js:68:13), <anonymous>:24:23)"}
答案 0 :(得分:0)
您的问题包含的有用信息太少,标题令人误解。
您在运行函数时遇到了一个错误。尝试添加更多描述,例如调用位置,视频包含哪些内容以及完整错误是什么。
但是根据我的经验,您可以先通过
开始调试首先,对于每个阶段,显示要调试的图像,例如视频灰度模糊边缘图像。只是想知道问题出在哪里。
第二,转换功能的输入应该是当前帧,也就是Mat。您只是将视频类传递给了convert函数吗?
最后但并非最不重要的一点,您可以按照其他人的做法进行尝试,例如
在链接的教程的样本部分中尝试学习它们如何使用mRBGA。我刚刚对此进行了测试,它正在工作。因此,我认为您可以通过正确的路由向他们学习
答案 1 :(得分:0)
如错误消息所述,您使用错误的参数调用cvtColor:您需要先将源框架,目标垫和颜色转换代码传递给函数
尝试这样
let src = cv.imread('canvasInput');
let dst = new cv.Mat();
cv.cvtColor(src, dst, cv.COLOR_RGBA2GRAY, 0);
edit:我也不太确定函数的参数:您将其命名为video,因此(如果您传递了实际的视频流),我认为您需要在转换之前从视频中提取帧>