我正在尝试使用opencv.js(javascript)检测具有蓝色的矩形纸

时间:2019-06-03 10:10:35

标签: javascript html opencv shapes

我正在尝试检测矩形形状和蓝色目标,但是当我尝试运行此代码时,出现了一些错误。我是否错过任何代码,请指导我,我正在使用 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)"}

2 个答案:

答案 0 :(得分:0)

您的问题包含的有用信息太少,标题令人误解。

您在运行函数时遇到了一个错误。尝试添加更多描述,例如调用位置,视频包含哪些内容以及完整错误是什么。

但是根据我的经验,您可以先通过

开始调试

首先,对于每个阶段,显示要调试的图像,例如视频灰度模糊边缘图像。只是想知道问题出在哪里。

第二,转换功能的输入应该是当前帧,也就是Mat。您只是将视频类传递给了convert函数吗?

最后但并非最不重要的一点,您可以按照其他人的做法进行尝试,例如

https://android.jlelse.eu/a-beginners-guide-to-setting-up-opencv-android-library-on-android-studio-19794e220f3c

在链接的教程的样本部分中尝试学习它们如何使用mRBGA。我刚刚对此进行了测试,它正在工作。因此,我认为您可以通过正确的路由向他们学习

答案 1 :(得分:0)

如错误消息所述,您使用错误的参数调用cvtColor:您需要先将源框架,目标垫和颜色转换代码传递给函数

尝试这样

let src = cv.imread('canvasInput');
let dst = new cv.Mat();
cv.cvtColor(src, dst, cv.COLOR_RGBA2GRAY, 0);

这里reference

edit:我也不太确定函数的参数:您将其命名为video,因此(如果您传递了实际的视频流),我认为您需要在转换之前从视频中提取帧