2012-01-18 7 views
3

OpenCVを使ってC++でプロジェクトを書いています。 Point2fのベクトルに格納された四角形の四角形の座標を持っています。 この四角形のすべてのピクセルにアクセスしたいです(その領域内の黒いピクセルの割合を確認する)。opencv-access all pixels in tetragon

どのようにすればいいですか?

P.S.この四角形は長方形ではなく、ケーキの一片になります。

EDIT: 物事を明確にする:私はそのRGB値にアクセスするために(4つの頂点によって与えられた)四角形の内部の全ての画素を反復処理したいと思います。

答えて

1

この種の操作は、実際のポリゴンを描画するためにOpenGLで使用されるようなラスタライズに似ています。したがって、ラスタライズに関するあらゆる情報も役立ちます。グラフィックカードにはハードウェアがあるので、OpenGLを使ってラスタライズする方が効率的ですが、あなたの質問はOpenCVに関するものなので、OpenCVで利用可能な関数を使ってみましょう。

まず、頂点を使ってcvFillConvexPoly()またはcvFillPoly()を呼び出してマスクイメージを作成します。元のイメージとマスクに使用する関数を呼び出すことができます。このようにして、ピクセルをループするとき、対応するマスク値がゼロでないピクセルを考慮すればよい。

+0

したがって、私は自分の作業イメージと同じように他のイメージサイズを作成しなければならないことを意味しています。例えば、白であれば、cvFillPoly()を呼び出して四角形の黒マスクを作成します。次に、イメージのすべてのピクセルを繰り返して、それが黒であるかどうかを確認します。これが、私の四角形内のすべてのピクセルを取得する方法です。私はあなたを正しく理解しましたか? – Wookie88

+1

OpenCV関数は、黒い背景と白い前景を持つマスクを使用します。そのため、この規則に従うこともできますが、理解は正しいです。しかし、これは非常に一般的な手順です。私たちがうまくいくかどうかは、それらのピクセルすべてを使って何をしようとしているかによって決まります... –

1

私はあなたの質問を正しく理解しているかどうかわかりません。

しかし、四角形の内側の領域を見つけるには、四角形の輪郭を見つけて、それを別の色で塗りつぶして、その色のピクセルの数を見つけます。そうすればパーセンテージを得ることができます。

また、モーメントの方法を使用して領域を見つけることもできます。またはリンクの下に試してみてください。

http://tech.groups.yahoo.com/group/OpenCV/message/58943 http://tech.groups.yahoo.com/group/OpenCV/message/44428

あなたは四角形の各ピクセルにアクセスしたい場合は、まずあなたがその輪郭を見つけることができます"cvGetSeqElem"関数を試してください。いくつかのコードのリンクの下に試してみてください。

http://osdir.com/ml/lib.opencv/2006-04/msg00044.html http://comments.gmane.org/gmane.comp.lib.opencv/15170

質問を誤解している場合を教えてください。

+0

を助けるかもしれないあなたは非常に私の質問を理解している、私は内部のすべてのピクセルにアクセスする必要がありますtetragon.Soあなたのリンクの第2のペアは少し役立った。 cvGetSeqElemはおそらく仕事をするでしょうが、頂点だけを持っていると私の四角形の輪郭をどうやって得ることができますか? – Wookie88

+0

次に、OpenCV関数を使用してポリゴンを描画します。 1)http://opencv.itseez.com/doc/tutorials/core/basic_geometric_drawing/basic_geometric_drawing.html 2)http://opencv.willowgarage.com/documentation/python/drawing_functions。html#polyline 3)http://opencv.willowgarage.com/documentation/python/drawing_functions.html#fillpoly次に、通常どおり、等高線を見つけてcvGetSeqElem関数を使用します。 –

+0

私はfindContours関数を試しましたが、その後、四角形の輪郭だけを反復し、内部のピクセルでは繰り返しません。この場合、私をさらに助けてくれますか? – Wookie88

1

私は幾分分析的な幾何学を行うべきだと思います。四角形を2つの三角形の組み合わせとして考えることができます。それらが接続されていない2つの点を結ぶ仮想線を作ってください。次に、それを囲む3行の方程式を使って三角形上の点を計算することができます。

enter image description here

+0

あなたはその質問を誤解しました。私は四角形の領域を探しているわけではなく、その中の各ピクセルにアクセスする必要があります。 – Wookie88

0

たぶん、あなたは、2つの三角形に四角形を分割し、続く.theの問題を解決するために、三角形のラスタ化アルゴリズムを使用することができますあなたのTriangleRasterization link