2016-05-26 7 views
2

グレースケール画像から長方形のオブジェクトを抽出する必要があります。私は、上記のように時々、長方形の物体が傾斜を有していてもよいopencvを使って任意の傾きの長方形のマスクを修正する

enter image description here

、以下に示すような矩形のマスクを抽出するために閾値を使用しています。次のステップにおいて、Iは(おおよそ)

enter image description here

時点で、Iは、ハフ線が画像のエッジに最も近いラインを見つけるために、変換を使用しています次のような出力を得るために長方形の物体の形状を修正しなければなりません(すなわち、ほとんどの線の垂直線を残して)。私は線の角度を取得し、その角度を使って回転行列を取得し、画像全体に対してwarpAffineを実行します(opencv関数を使用)。

画像エッジに近い縦線検出 enter image description here

アフィン私はPythonの

# get the rotation matrix 
 
myRotMatrix = cv2.getRotationMatrix2D((inBinaryImage.shape[1]/2,inBinaryImage.shape[0]/2),-myAngle,1)    
 
    
 
# perform warpAffine to avoid issues    
 
myBinaryImageTemp = cv2.warpAffine(inBinaryImage,myRotMatrix,(myNewWidth,myNewHeight))

として、次のコードを使用していた画像 enter image description here

を修正あなたは、アフィン修正されたオブジェクトがまだ上と下にいくらかの傾きを持っているのを見ることができます。トップ/ボトムから傾きを取り除く簡単な方法はありますか?あなたがgetPerspectiveTransformで何かを行うことができるはず

おかげ

+0

あなたの問題は、矩形自体が実際には長方形ではないことです、それはパーレルです。パラレルレの間、その側面は直角を持っていません。正しい量を回転させているコードでは、コードは正しく機能していますが、その線に接続する「シェイプ」のコーナーは、下隅と上隅に約108度と8​​0度です。 (これはあなたの傾きの結果になります。) –

+0

それは固定することができる方法はありますか? – user1388142

答えて

1

は、私がin a grid finderそれを使用して、私の使い方は本当にあなたとまったく同じではありませんが、あなたは確かにそれを読むことによって十分に学ぶことができます。私はopencvの専門家ではなく、最先端のコードを期待していません。

また、傾いたオブジェクトの割合を知ることは、オブジェクトの向きを理解するための教師あり学習のような考えを使わずに、おそらくほぼ不可能です。ここでそれについての議論があります:https://math.stackexchange.com/questions/1339924/compute-ratio-of-a-rectangle-seen-from-an-unknown-perspective

関連する問題