2016-11-29 9 views
3

私は写真を撮るDIYのホーム写真スタジオを持っています。私は私が簡単なPythonプログラムを実装 original imagePython OpenCV純粋な白の背景

私は(カメラからの任意の処理、ちょうど生JPG)を持っている。これは、元の画像である彼らは、最小のユーザインタラクション

で純粋な白色の背景(#FFFFFF)になりたいです

1 UI

のためのOpenCVとTkinterは)たぶん後、私は自動的に写真上のオブジェクトを認識するためのコードを記述します、私はUIでROIを選択することを決定

)オブジェクト(ROIを持つ矩形を取得します。 cv2.grabCut機能付

select ROI

2)私はgrabcutのカスタムマスクを作成する必要があれば、この矩形

grab cut with rect

cv2.grabCut(image, self.mask, rect, bgdmodel, fgdmodel, 5, cv2.GC_INIT_WITH_RECT) 

3)から背景をカットしようとしていますより正確なオブジェクト抽出を提供できる。

grab cut with mask

cv2.grabCut(image, self.mask, rect, bgdmodel, fgdmodel, 5, cv2.GC_INIT_WITH_MASK) 

4)このステップの後、私は私のオブジェクトが配置されているマスクを作成することができます。また、私は

src_bg = 255 * np.ones(self.src.shape, self.src.dtype) 

width, height, channels = src_bg.shape 
center = (int(height/2), int((width/2))) 
output = cv2.seamlessClone(crop_img, src_bg, mask, center, cv2.MIXED_CLONE) 

seamlessClone方法のため、このマスクを使用する)ので、このマスクは、より幅と高さ

object mask

5を持っている30px

mask = cv2.resize(mask, (crop_img.shape[1] + 30, crop_img.shape[0] + 30)) 
mask = mask[30 : crop_img.shape[0], 30 : crop_img.shape[1]] 

によってマスクのサイズを変更し、そのような結果を得る: output

オブジェクトの右側にいくつかのアーティファクトを除いてよく見えます。私のマスクは良くフィットしていないようです。これは本当の問題ではありません。本当の問題は:seamlessCloneは私に本当に白い背景を与えません。レベルを見てみましょう:

levels

いくつかの奇妙なグラデーションや背景本当に右下隅に白いではありません。私は多くの画像で試してみることが多く、そのようなことがしばしばあります。

私の質問は:私は何をしたいのですか?私のアプローチはこの作業に使用でき、そのような勾配なしで実際に白(#FFFFFF)の背景を作る方法ですか?ありがとう

+1

多分あなたは写真を撮るときにもっと多くのランプを使います。 – furas

答えて

1

マスクの分割前にbump up the contrastを使用すると、余分な光やマニュアルの初期化なしにシャドウを取り除くことができます。

このようなきれいな背景の場合は、Watershedのような別のセグメントを試すことができます。マーカーも使用しますが、少し速いです。

あなたはしきい値+ dilationからdistance transforms +しきい値、アウターマーカーから内側のマーカーを得ることができますし、あなたがそれらをしたい場合は、Hough Transformsまたはactive contoursで端から行を取得することができます。

私はあなたのseamlessCloneがグラデーションを引き起こしていると思います。 'シームレスな'部分は、ブレンドによるものです。黒いマスクに画像を乗算して背景を削除し、その結果を白い画像に追加するだけです。

+0

さて、私は流域を見るでしょう、ありがとう。 – striker

1

他のツールを使用したいと思っているのですが、Linuxの場合はImageMagickがインストールされている可能性があります。 OS XとWindowsでも利用できます。だから、

、我々はこのイメージで起動した場合:

enter image description here

とのは、赤い線の座標は、背の高い480PX、幅550pxと、トップから250200をオフセットされた画像に対応することを想定してみましょう画像の左側に表示されます。すると、ちょうどターミナルでのコマンドラインで、次のコマンドを実行します。

convert photo.jpg -crop 550x480+250+200 \ 
    -fuzz 25% -fill white -draw 'color 0,0 floodfill' -trim result.jpg 

をあなたにこの与える:コマンドラインが... 「オープンphoto.jpgと作物を意味することに

enter image description here

を赤い部分。左上隅のピクセルから25%の色の変化を許し、純粋な白でイメージをフラッドフィルします。result.jpgとして保存します。

ファジーの割合を高く設定してください。

+0

ImageMagick追加奇妙なエッジ – striker

関連する問題