オブジェクト検出やオブジェクトトラッキングなど、画像内の特定のローカルフィーチャを描画する必要があることがよくあります。今日、そこにある楽しい描画ツールを見てみましょう!
線を引く
まず、描かれた線の環境を作成するには、空の黒い背景画像を生成する必要があります。numpyを使用して実験します。
view plaincopy to clipboardprint?
1. import cv2
2. import numpy as np
3. img=np.zeros((512,512,3),np.uint8)
4. cv2.imshow("img",img)
5. cv2.waitKey(0)
6. cv2.destroyAllWindows()
これは黒い背景です。キャンバスです。ウィンドウ名をimgと呼び、np.zeros()には2つのパラメーターがあります。1つは作成されたイメージマトリックスのサイズ、もう1つはデータタイプ、512、512はピクセルです(最初の512ピクセル)。高、2番目は512ピクセル幅)、3は3色のBGRを指します
uint8は0〜255を使用してすべての色を表します。
線画関数のプロトタイプを見てみましょう:
cv2.line(img、start、end、color、thickness)
imgは操作する画像、startとendは線の両端、colorは線の色、thicknessは線の太さです。
関数の例:
view plaincopy to clipboardprint?
1.cv2.line(img,(0,0),(511,511),(255,0,0),5)
この関数には5つのパラメーターがあります。つまり、imgはイメージ名、(0、0)は始点の座標、(511、511)は終点の座標、(255、0、0)は青、5は線の幅です。
左上隅から右下隅に青い線が描画され、実験的な効果がわかります。
長方形を描く
長方形関数の描画は非常に重要な部分になります。将来の実際の運用プロジェクトでは、基本的にOpenCVで最も使用される描画関数は描画関数であることがわかります。この関数には、輪郭の描画やリアルタイムのターゲットの追跡など、幅広いアプリケーションがあります。そのとき、追跡されたターゲットをマークするために、rectangle関数も使用します。次に、最初に長方形関数を理解します。
cv2.rectangle(img、(50,50)、(400,400)、(0,0,255)、3)
この関数には5つのパラメーターがあり、imgはイメージ名、(50、50)は左上の頂点の座標、(400、400)は右下の頂点の座標、(0,255,0)は緑、線の幅は3です。
長方形の2つの要素を描画します:左上の頂点と右下の頂点の座標。
コードを見てみましょう:
view plaincopy to clipboardprint?
1.import cv2
2.import numpy as np
3.
4.img = np.zeros((512, 512, 3), np.uint8)
5.cv2.rectangle(img,(50,50),(400,400),(0,0,255),3)
6.
7.cv2.imshow("img", img)
8.cv2.waitKey(0)
9.cv2.destroyAllWindows()
実験的効果:
円を描く
関数:
cv2.circle(img、(447,63)、63、(0,0,255)、-1)
この関数には5つのパラメーターがあります。画像名、中心座標、半径63、(0,0,255)赤、線幅は-1、線幅が-1の場合は、閉じた図形の塗りつぶしを意味します。
円を描く2つの要素:円の中心点座標と半径を指定する
コード:
view plaincopy to clipboardprint?
1.import cv2
2.import numpy as np
3.
4.img=np.zeros((512,512,3), np.uint8)
5.cv2.circle(img,(256,256), 63, (0,0,255), -1)
6.cv2.imshow("img",img)
7.cv2.waitKey(0)
8.cv2.destroyAllWindows()
デモ効果:
楕円形を描く
関数プロトタイプ:
cv2.ellipse(img、center、axes、angle、start_angle、end_angle、color、thickness、line_type、shift)
imgは操作のイメージ、centerは楕円の中心、axesは楕円の主軸と短軸、angleは偏向角、start_angleとend_angleは弧の開始角度と終了角度、色は線の色、太さは線の太さ、line_typeは線のタイプ、shiftは中心座標点と数値軸の精度です。
関数の例を示します。
cv2.ellipse(img、(256,256)、(100,50)、0,0,180,255、-1)
この関数には8つのパラメーターがあります:imgは画像名、(256、256)は中心点座標、100は長軸の長さ、50は短軸の長さ、0回転角度、および画像の一部(長軸は時計回りに始まります)角度と終了角度)0,180は楕円の下半分、ここでのカラー配列は255は青です。-1は塗りつぶされており、0より大きい値は中空であり、線幅はユーザーが決定します。
楕円を描くいくつかの要素:1.中心点の位置座標2.長軸と短軸の長さ3.反時計回りに回転する楕円の角度4.時計回りに長軸の開始角度と終了角度
コード:
view plaincopy to clipboardprint?
1.import cv2
2.import numpy as np
3.
4.img=np.zeros((512,512,3), np.uint8)
5.cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
6.cv2.imshow("img",img)
7.cv2.waitKey(0)
8.cv2.destroyAllWindows()
デモ効果:
次に、楕円全体を描画し、コードの下から3番目のパラメーターを180から360に変更します。
cv2.ellipse(img、(256,256)、(100,50)、0,0,360,255、-1)
中空の円を描く場合は、最後のパラメーターを正の値、つまり線の幅に変更するだけです。
view plaincopy to clipboardprint?
1.cv2.ellipse(img,(256,256),(100,50),0,0,360,255,4)
効果:
ポリゴンを描く
OpenCVは、APIを介してポリゴンを描画できます。関数の例は次のとおりです。
pts = np.array([[20,20]、[350,40]、[420,400]、[60,420]]、np.int32)
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img、[pts]、True、(0,255,0)、2)
cv2。polylines()には5つのパラメーターがあります。イメージ名、頂点リスト(このポリゴンには配列内に4つの頂点があります)、Trueは閉じている、(0,255,255)は黄色、3は線の幅です。ptsは、numpyを使用して作成された4つの頂点の配列です。この配列のデータ型はint32である必要があります。
コード:
view plaincopy to clipboardprint?
1.import cv2
2.import numpy as np
3.
4.img = np.zeros((512, 512, 3), np.uint8)
5.pts=np.array([[20,20],[350,40],[420,400],[60,420]], np.int32)
6.pts=pts.reshape((-1,1,2))
7.cv2.polylines(img,[pts],True,(0,255,0),2)
8.
9.cv2.imshow("img", img)
10.cv2.waitKey(0)
11.cv2.destroyAllWindows()
効果のデモ:
頂点配列の順序を変更すると、異なる結果が得られます。
view plaincopy to clipboardprint?
1.pts=np.array([[20,20],[350,40],[60,420],[420,400]], np.int32)
効果:
画像にテキストを追加する
OpenCVを使用して、画像にテキストを追加できます。関数の例は次のとおりです。
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img、 'OpenCV'、(10,250)、font、4、(255,255,255)、2)
この関数には8つのパラメーターがあります。つまり、画像名、文字列、座標、フォント、フォントサイズ、(255,255,255)は白、線幅は2です。
もちろん、OpenCVは中国語の追加をサポートしていません。中国語の文字を追加する場合は、中国語のフォントを追加するか、PILを使用して操作できます。漢字をサポートしないことの公式な説明は、ライブラリをシンプルで軽量に保つことであり、将来的には中国語をサポートしないことになるため、誰もが英語を使用するようにしてください。結局のところ、将来的に多くのドキュメントを読むには英語を使用する必要があります。
コード:
view plaincopy to clipboardprint?
1.import cv2
2.import numpy as np
3.
4.img=np.zeros((512,512,3), np.uint8)
5.font=cv2.FONT_HERSHEY_SIMPLEX
6.cv2.putText(img,'OpenCV',(10,250), font, 4,(255,255,255),2)
7.
8.cv2.imshow("img",img)
9.cv2.waitKey(0)
10.cv2.destroyAllWindows()
効果は次のように示されます。
この時点で、OpenCVの描画関数は基本的にそれであり、次のことに特別な注意を払う必要があります。
すべての描画関数の戻り値はNoneであるため、次のようなものは使用できません:img = cv2.line(img、(0,0)、(511,511)、(255,0,0)、5)、描画関数は直接呼び出されますできる。
記事の概要ページを表示https://blog.csdn.net/weixin_44237705/article/details/107864965
グループ内でより多くのopenvino技術情報を交換できます〜