2017-02-23 22 views
0

私は2つのモノクロ画像のセットを持っています。ここでは、各画像の両方の人のために長方形の境界ボックスを配置したいと思います。私はcv2.dilateが役立つかもしれないと理解していますが、私が見ている例のほとんどは最大のピクセル強度を含む1つの長方形を検出することに焦点を合わせています。私は2つの別々の長方形を持っていたいと思います。Pythonのモノクロ画像のオブジェクトの周りの四角形の境界ボックス?

image1

image2

UPDATE: これは私の試みです:

import numpy as np 
import cv2 

im = cv2.imread('splinet.png',0) 
print im.shape 
kernel = np.ones((50,50),np.uint8) 
dilate = cv2.dilate(im,kernel,iterations = 10) 
ret,thresh = cv2.threshold(im,127,255,0) 
im3,contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 
plt.imshow(im,cmap='Greys_r') 
#plt.imshow(im3,cmap='Greys_r') 

for i in range(0, len(contours)): 
    if (i % 2 == 0): 
     cnt = contours[i] 
     #mask = np.zeros(im2.shape,np.uint8) 
     #cv2.drawContours(mask,[cnt],0,255,-1) 
     x,y,w,h = cv2.boundingRect(cnt) 
     cv2.rectangle(im,(x,y),(x+w,y+h),(255,255,0),5) 
     plt.imshow(im,cmap='Greys_r') 
     cv2.imwrite(str(i)+'.png', im) 

cv2.destroyAllWindows() 

、出力は以下に添付されています。ご覧のとおり、小箱が作られ、そのないされていますスーパークリアも。

output

+1

*** 'ほとんどの例' ***これはどういう意味ですか?そしてあなたが望むのは何ですか? –

+0

私は、チュートリアルでは、最大ピクセル強度を含む1つの矩形を検出する際にオンラインフックを見つけることを意味します。私は画像の両方の人にバウンディングボックスを配置したい – GKS

+1

出発点として、「輪郭バウンディングボックスのバイナリ画像」を検索し、ここにいくつかのコードを取得する必要があります。アイデアは、画像をスレッシュホールドして輪郭を見つけて、 – ZdaR

答えて

0

あなたの問題の本当の問題は、モノクロ画像から最適なしきい値の選択です。

グレースケール画像(投稿の2番目の画像)の中央値を計算します。 閾値のレベルは、33%に設定されます。このしきい値以下の値はすべて2進化されます。

これは私が得たものである:

enter image description here

は今、あなたは長方形で興味のあるお住まいの地域を強調表示することができ、輪郭の操作に続いて形態学的拡張を行うことができます。

注:あなたがやったよう

は、マニュアルのしきい値を設定することはありません。しきい値は、画像によって異なる場合があります。したがって、常にイメージの中央値に基づくしきい値を選択してください。

+0

まだ1人の矩形が得られていません。それは右の人のための1つの長方形を与える – GKS

+0

近似は、このようなイメージを与えられたあなたの最善の賭けです –

関連する問題