2017-09-13 89 views
1

我正在阅读照片并过滤出颜色,这是我在以下图像中获得的结果。代码来自opencv模块中的示例文件夹。彩色滤光片技术OpenCV

Prior Color FilterPost 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

第二部分,你的意思是计算移动无人机的轨迹?或者与Parrot SDK(http://developer.parrot.com/)连接? – Mepix

+0

将无人机的轨迹移至白线。我一直在使用'node.js'。不知道什么是SDK。 – Danny

+1

该SDK是用于控制无人机的软件开发工具包。以下是一些Parrot无人机的SDK文档链接(http://developer.parrot.com/docs/SDK3/)。我认为你的A.R. Drone 2.0将与SDK2相对应,SDK2也可以在网站上找到。 – Mepix

回答

2

由于您的无人驾驶飞机可以在三维空间中移动,我会建议在2D领域的一些伪码的步骤,让你开始用简单的线条跟随者。然后,您可以推断为3D,并添加更多自由度以满足您的需求。

  1. 执行Erosion/Dilation如果需要,可以对图像进行操作以消除额外的空间。
  2. 拨打电话cv::findContours()以获得图像中白色区域边缘的迹线。
  3. 按像素区域对找到的轮廓进行排序,找到您想要遵循的轮廓。我猜你通常会想要跟随最大的像素区域。尝试使用contour moments
  4. 使用cv::fitline()或您自己的方法在轮廓上划线。
  5. 取出线的角度并将其映射到您的无人机控制器以调整偏航。

从这里,你可以做其他一些基本的东西来控制你的无人驾驶飞机的运动:

  • 设置一个轮廓像素质量阈值。如果轮廓区域>阈值,则向上移动。
  • 看看阈值区域的形状。如果它更像是一个矩形的梯形,你可以调整你的滚动/音高。
+0

我看看这些命令。谢谢你。我可以用JavaScript编写吗?或者我应该以某种方式将'opencv'函数调用到我的node.js.这是正确的想法吗?你能否让我更好地了解如何将两种语言联系在一起,或者我错误地思考。 – Danny

+0

有没有办法使用'opencv'来移动无人机。或者我需要'node.js' – Danny

+0

我正在使用这个库:https://github.com/puku0x/cvdrone。我将如何处理你提到的映射到无人机控制器的问题。轮廓面积>阈值 – Danny