2009-08-12 26 views
5

私はいくつかのJPG画像を持っています。そのうちのいくつかはかもしれませんは、1つ以上の側面に黒い境界線を持っており、私はそれらを削除したいと思います。黒い枠線は実際の画像の周りにはないかもしれません - いくつかのものは中央に置くことができるものの(実際の画像を上にして)底部に境界線しか持たないものもあれば、さらに悪いことに、画像はJPG圧縮されているため、正確には0,0,0ではありません。画像の周りに黒い枠線を取り除く

ペイントプログラムでは、許容範囲の低い「マジックワンド」ツールを「単純に」使用しますが、ASP.netのC#で行う必要があります。これを実行する最善の方法がわかりませんです。

各行をスキャンし、次に各列(入れ子になった2つのfor-loops)で黒い領域を見つけるべきでしょうか?いくらか愚かなこと、パフォーマンス、CPU負荷に見えます。または、GDI +にはすでにいくつかの魔法の杖ツールが組み込まれていますか?

イメージはそれほど大きくなく(最大474x474ピクセル)、その後キャッシュされますが、サーバーの負荷をできるだけ低く抑える必要があります。

どのようなヒントでも、それほど愚かではありません。

答えて

4

それはあなたがこのような何か行うことができ、各エッジのためのように思える:

for each edge: 
    for (i = 0; ; i++) { 
     compute average pixel value along edge row/column + i 
     if (average value > threshold) 
       break; 
    } 
    crop image 
+0

そのアプローチは、ビットブルートフォース(2がforループ)ようだが、それは(驚くほど速いです画像あたり1ミリ秒未満)。平均色の値を考えてくれてありがとう。 –

+1

画像処理の悲しい真実は、少なくとも、より低いレベルでは、関心のあるすべてのピクセルにわたって反復する必要があることです。また、ユーザーがほとんど黒い画像をアップロードできる場合は、この方法に少し注意してください。おそらく許容される境界線のサイズの上限を設定します。 – Eric

関連する問題