2013-03-06 297 views
0

所以我是圖像處理新手,我現在有點學習emgucv .. ..我想跟蹤一個特定顏色的球 - 橙..但是.. 所以..我需要的是閾值,孤立,或二進制化(我不知道正確的術語)..圖像保留白色和黑色的灰色圖像。白色是橙色,黑色是非橙色..(對不起,如果這聽起來有點愚蠢)..但是,當二進制化圖像...陰影......橙子的陰影時有很多考慮因素......高效的快速顏色提取Emgucv

我很困惑,什麼是使用我已經試過了圖像的INRANGE功能的最佳功能.. ..

imgProcessed = imgOriginal.InRange(mincolor,maxcolor);

不管怎樣,..我覺得它很慢..我不能真正二進制化所有的球..(從深橙色到淺橙色)..再加上我每次調整值光條件變化..是有沒有什麼辦法可以讓橙色的「全部」或至少「最」色調?對不起...新手這裏...我會很感激任何幫助..代碼是沒有必要的..謝謝!:D

有這麼多的功能使用.. HSV .. inrange .. cvthreshold ..什麼是最好的辦法?會使用hsv而不是bgr會更快嗎?

回答

1

我已經這樣做了。我放棄了OpenCV的功能,並親自完成了數學計算。這裏是我的代碼:

 for (i = 0; i < rows; i = i + step) 
       { 
        for (j = 0; j < cols; j = j + step) 
        { 

         closestprimary = new Bgr(0, 0, 0); 
         currentcolor = ImageFrame[i, j]; 
         B = (int)currentcolor.Blue; 
         G = (int)currentcolor.Green; 
         R = (int)currentcolor.Red; 
         //hue = atan2(sqr(3) * (G - B), 2 * R - G - B) 
         hue = ((Math.Atan2(1.732050808 * (double)(G - B), (double)(2 * R - G - B)) * 57.295779513) + 360) % 360; ; 
         //find closest primary hue (60 degree) 
         if (hue >= 15 && hue < 50) { 
          closestprimary = new Bgr(0, 127, 255); } //orange - sorta had to eyeball this one /shrug 
         ImageFrame[i, j] = closestprimary;//set new color 
        } 
       } 

希望你能看到橙色色調如何在15和50之間,並且可以改變號碼,無論你想要得到你所希望的任何顏色。

http://johndyer.name/lab/colorpicker/ 幫助我決定色調。 (看看頂部的數字,由'H')