2017-09-18 1 views
0

私は画像処理の初心者です。opencvを使用して、どのように透明ではない画像を削除するには?

矩形/フレームのサイズを変更しようとしています。オブジェクトを透明なイメージにバインドしました。

enter image description here

しかし、私はそれを作る方法がわかりません。

私を助けてください。

ありがとうございました。 P/s:作物と重複しません。作物ではタプルを修正しました(x、y、w、hからの作物)。しかし、私の絵では、私はどこで作物をするべきかわかりません。まず私のオブジェクト(サングラス)を含む最小の矩形を検出し、次に切り抜く必要があります。あなたはお知らせcv2.IMREAD_UNCHANGED

import cv2 
import numpy as np #needed in the second step 
im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED) 
OpenCVの

にアルファのサポートで画像をロードする必要が

+0

[OpenCVでPythonを使用して画像を切り抜く方法](https://stackoverflow.com/questions/15589517/how-to-crop-an-image-in-opencv-using-python) – api55

+0

In重複している可能性があります.PILとOpenCVの2つのバージョンがあります。可能な違いは透明部分で、少なくともOpenCVでロードするとフラグ部分に-1を入れなければならないことです。 – api55

+0

@ api55いいえ作物と重複しています。あなたはタプルを修正しました(x、y、w、hからトリミング)。しかし、私の絵では、私はどこで作物をするべきかわかりません。私は私のオブジェクト(サングラス)を含む最小の矩形を検出する必要があります –

答えて

0

まず、これは-1に等しいです。これは、その後、あなたがオブジェクトをトリミング

cropImg = im[miny:maxy, minx:maxx] 

最後にあなたが表示され、ディスクにあなたの結果を保存し、あなたがオブジェクト

# axis 0 is the row(y) and axis(x) 1 is the column 
y,x = im[:,:,3].nonzero() # get the nonzero alpha coordinates 
minx = np.min(x) 
miny = np.min(y) 
maxx = np.max(x) 
maxy = np.max(y) 

の境界の矩形を見つける形式BGRA

で画像をロードします

cv2.imwrite("cropped.png", cropImg) 
cv2.imshow("cropped", cropImg) 
cv2.waitKey(0) 

私はこのコードをテストする時間がないので、タイプミスがある可能性があります。それがあなたを助けることを願っていますすべての問題、ちょうど

UPDATEここ

は余分な白い部分を除去するための小さなアップデートで、この回答のコメント:

まず、それが変更次に白

whiteCellsMask = np.logical_and(cropImg[:,:,0] == 255, np.logical_and(cropImg[:,:,1] == 255, cropImg[:,:,2]== 255)) 

あるブールマスクを取得マスクされた値のアルファは0

cropImg[whiteCellsMask,:] = [255, 255, 255, 0] 

に変更されます。白(255,255,255)から透明(α= 0)までのすべてのピクセル。

+0

このコードは作物輪郭オブジェクトではありません、私の画像https://i.stack.imgur.com/Xy9VB.pngをご覧ください。この写真のホワイトノイズの境界線を取り除くことができます。この画像を別の画像に挿入すると非常に悪く見えます –

+0

@JameHまあ、あなたの質問は、境界に合わせて画像のサイズを変更することでした...しかし、削除する余分な部分が白であるので、私の更新されたコードを見てください.. – api55

関連する問題