2016-11-07 33 views
1

OpenCV4Androidバージョン2.4.11を使用しています。私はカメラからフレームを読み込んでいて、フレーム内の長方形の形を検出しています。次に、検出されたオブジェクトの周囲に半透明の矩形を描画しようとします。四隅を指定して四角形を描く方法

私がしたいことは、検出されたオブジェクトの四隅が半透明の矩形を描画することです。しかし、openCVでは "topLeftとBottomRight"という2つの点だけを指定して長方形を描くことができます。

topLeftとBottomRightのコーナーを指定するだけではなく、四隅を指定して矩形を描く方法を教えてください。

下記掲載画像はあなたに私の試みを表示するようにして私が欲しいもの

画像は、4つの検出されたコーナーの周りに四角形を描画するために「赤、緑、青、白」であることを示すことです。

enter image description here

+0

あなたは4点を指定するポリゴンを描画する必要があります。ここをクリックしてください(http://docs.opencv.org/2.4/doc/tutorials/core/basic_geometric_drawing/basic_geometric_drawing.html)、ポリゴンの描画についての節があります – Klaus

+0

@Klausポリゴンを描画しますか?私はそれを探っているがopencvのJava APIのために私は角のポイントだけを持っている間私はmatOfPointsのリストをspceifyする必要がある – user2121

+0

私はあなたの問題を把握することができませんしかし、[ここ](http://stackoverflow.com/questions/9082204/opencv-draw-a-white-filled-polygon)は、SOに関する同様の質問へのリンクです。答えではない質問を見てください。違いはちょうど彼があなたが必要でないと思うポイントでいくつかの翻訳を行います。 – Klaus

答えて

1

OpenCVのは、四角形の描画機能を提供していませんが、あなたが計算されてきた4点を使用して左上と右下の点を生成することができます

あなたの4つのポイントが - (tlx,tly),(trx,try),(blx,bly)(brx,bry)で、tlが左上、brが右下であるとします。

次に、あなたが計算できます。

x1=min(tlx,trx,brx,blx);//top-left pt. is the leftmost of the 4 points 
x2=max(tlx,trx,brx,blx);//bottom-right pt. is the rightmost of the 4 points 
y1=min(tly,try,bry,bly);//top-left pt. is the uppermost of the 4 points 
y2=max(tly,try,bry,bly);//bottom-right pt. is the lowermost of the 4 points 

これをポイント(0,0)が左上に発生することを想定しています。 @Saranshとして

rectangle(src, Point(x1,y1), Point(x2,y2),Color,Thickness,other_params); 
0

同じ考えを、私にとってコンパイルします: 今、あなたは使用することができます

auto x1 = std::min(tlx, std::min(trx, std::min(brx, blx))); // top-left pt. is the leftmost of the 4 points 
auto x2 = std::max(tlx, std::max(trx, std::max(brx, blx))); // bottom-right pt. is the rightmost of the 4 points 
auto y1 = std::min(tly, std::min(try, std::min(bry, bly))); //top-left pt. is the uppermost of the 4 points 
auto y2 = std::max(tly, std::max(try, std::max(bry, bly))); //bottom-right pt. is the lowermost of the 4 points 
関連する問題