0

だから私は画像処理に不慣れで、私はちょっとemgucvを学んでいます..特定の色のオレンジ色のボールを追跡したい.. 、または二値化(正しい用語はわかりません)..白と黒のグレーの画像を保持する画像。白はオレンジ色で、黒はオレンジ以外の色です..(これがちょっとばかげているように聞こえる場合は申し訳ありません..しかし、画像を二値化する際には多くの考慮事項があります...影..オレンジの色合い...

使用するのに最適な関数は何かについて混乱しています..画像のinRange関数を試しました..

imgProcessed = imgOriginal.InRange(最小カラー、最大カラー);

ただし、..遅いと思います..そして、すべてのボールを実際に2値化することはできません..(暗いオレンジから明るいオレンジまで)..さらに、光の状態が変わるたびに値を調整する必要があります..方法はありますかオレンジの色合いの「すべて」または少なくとも「ほとんど」を取得しますか? 申し訳ありません..初心者です...助けていただければ幸いです..コードは必要ありません..ありがとう!:D

使用する関数がたくさんあります.. HSV.. inrange.. cvthreshold.. 最善の方法は何ですか? bgr ではなく hsv を使用すると高速になりますか?

4

1 に答える 1

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」の一番上の数字を見てください)

于 2014-01-12T22:03:46.450 に答える