彩色滤光片技术OpenCV

时间:2017-09-13 14:58:11

标签: javascript opencv camera jpeg robot

我正在阅读图片并过滤掉颜色,这是我在下面的图片中得到的结果。代码来自opencv模块中的示例文件夹。

Prior Color Filter Post Color Filter

我正在尝试将图片反馈给A.R Drone 2.0并让无人机跟随白色。我该怎么做第二部分?

var cv = require('C:/users/danny/codes/node_modules/opencv/lib/opencv');

// (B)lue, (G)reen, (R)ed
var lower_threshold = [220, 220, 220];
var upper_threshold = [255, 255, 255];

//var lower_threshold = [46, 57, 83];
//var upper_threshold = [80, 96, 115];

cv.readImage('C:/users/danny/codes/node_modules/opencv/examples/files/gutter.jpg',
  function(err, im) {
    if (err) throw err;
    if (im.width() < 1 || im.height() < 1) throw new Error('Image has no size');

    im.inRange(lower_threshold, upper_threshold);
    im.save('C://users/danny/codes/coin_detected.jpg');
    console.log('Image saved to C://users/danny/codes/coin_detected.jpg');
  });

1 个答案:

答案 0 :(得分:3)

由于您的无人机可以在3D空间中移动,我将在2D领域中建议一些伪代码步骤,以便您开始使用简单的线跟随器。然后,您可以推断3D并添加更多自由度以满足您的需求。

  1. 对图像执行Erosion/Dilation操作,以便在必要时删除额外空间。
  2. 致电cv::findContours()以获取图片中白色区域边缘的痕迹。
  3. 按像素区域对找到的轮廓进行排序,以找到您想要遵循的轮廓。我猜你最常想跟随最大的像素区域。尝试使用contour moments
  4. 使用cv::fitline()或您自己的方法在轮廓上插入一条线。
  5. 取线的角度并将其映射到无人机控制器以调整偏航。
  6. 从这里开始,你可以做其他一些基本的事情来控制无人机的运动:

    • 设置轮廓像素质量阈值。如果轮廓区域>门槛,向上移动。
    • 查看阈值区域的形状。如果它更像是梯形而不是矩形,则可以调整滚动/俯仰。