0

Little description:
I get an image from my scanner using Capture Core Framework and background color is gray. So I want to do white background.

I'm looking for best way to remove this color. I looked at Image Core Filters. And as I understood I should use those ones, but I couldn't find included/ready filterfor this task. So, Do I have to write it myself?
It means to remove color I should write my own filter and apply it to my images? Right? Thank you.

UPD: I develop for Mac os

4

2 に答える 2

1

ここでの作業には、フィルターは適切なツールではありません。フィルタは、画像内のすべてのピクセルに、ピクセルごとにカラーシフトアルゴリズムを適用します。

これは、白に変えたいピクセルに完全にユニークなものがある場合に適しています。たとえば、除去したい背景が、画像の他の部分では発生しなかった非常に狭い色範囲にあった場合です。これは、グリーンスクリーン/ブルースクリーンの撮影で使用される手法であり、保持したい画像領域のどこにもその緑または青の色が発生しない場合にのみ機能します。

しかし、コメントの1つで述べているように、削除したいグレーレベルは背景に固有ではないため、これを行うことはできません。そのため、これらのピクセルを選択するフィルターを適用すると、ピクセルのピクセルにも影響を与える可能性があります。スキャンされた主題。

本当に必要なのは、関心のある領域を選択し、その領域だけにフィルターを適用する方法です。これにはopenCVを使用できます。実際、それはあなたの結果を一度に達成することができる機能を持っています:

http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html?highlight=floodfill#int

floodFill(InputOutputArray image, //image to process
          Point seedPoint,        //starting pixel
          Scalar newVal,          //New value of the repainted domain pixels
          Rect* rect,             //optional output param (you won't need it)
          Scalar loDiff,          //max lower brightness/colour diff to select
          Scalar upDiff,          //max upper brightness/colour diff to select
          int flags)              //you want FLOODFILL_FIXED_RANGE

この関数はseedPointから始まります。これは、削除する背景の灰色の一部になることを保証できる任意のピクセルである必要があります。(0,0)はあなたのために働くかもしれません。次に、隣接するピクセルを調査します。これらのピクセルが十分に類似している場合は、ROI配列に含めます。結果の配列は接続された領域です。背景の灰色が均一にloDiffとupDiffの間にあり、被写体のスキャンにこの範囲に収まらない定義済みのエッジがある場合、結果が得られます。すべての背景ピクセルを選択してnewVal(白)に再マッピングします。

于 2013-01-22T13:37:19.920 に答える
1

単純に画像の明るさを変更してみませんか? この灰色の背景色の値が固定されている場合は、前処理のステップとして、満足するまで明るさを少し上げることができます。

于 2013-01-22T14:08:16.910 に答える