2017-09-13 88 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