描画関数 ============ .. highlight:: python 描画関数は,任意のビット深度を持つ行列または画像に対して動作します. 描画される形状の境界は,アンチエイリアス処理されます(今のところ,8ビット画像に対してのみ実装されています). すべての関数の引数は,カラー画像の場合には RGB 値で表現された色(これは ``CV_RGB`` マクロや :func:`Scalar` コンストラクタによって作られます),グレースケール画像の場合には輝度値,となります.カラー画像のチャンネルの順序は通常 *Blue, Green, Red* となります.つまり,これが :func:`imshow` , :func:`imread` や :func:`imwrite` などが期待する順序です. ユーザ独自の画像レンダリング関数や入出力関数を利用する場合は,好きなチャンネル順序を用いることができます.描画関数は各チャンネルを個別に処理し,チャンネル順序はもちろん,利用される色空間にも依存しません.また :func:`cvtColor` を用いて,画像全体を BGR から RGB や別の色空間に変換することができます. 描画する図形が,画像の外側に部分的にあるいは完全にはみ出す場合,描画関数はそれを切り詰めます.多くの描画関数は,サブピクセル精度で指定された座標を扱うことが可能です.つまり,座標値は固定小数点数として渡されたり,整数にエンコードされたりする可能性があります.小数部分のビット数は,引数 ``shift`` によって指定されるので,実数の点座標は :math:`\texttt{Point}(x,y)\rightarrow\texttt{Point2f}(x*2^{-shift},y*2^{-shift})` として計算されます.これにより,図形をアンチエイリアス処理された形状として表現することができます. また,これらの関数は,アルファ透過をサポートしません.目的画像が4チャンネルである場合でも ``color[3]`` には,単なるピクセル値がコピーされるだけです.したがって,もし半透明な形状を描画したい場合は,それを別のバッファに描画してから画像とブレンドするとよいでしょう. .. index:: Circle .. _Circle: Circle ------ `id=0.839535533882 Comments from the Wiki `__ .. function:: Circle(img,center,radius,color,thickness=1,lineType=8,shift=0)-> None 円を描きます. :param img: 円が描かれる画像. :type img: :class:`CvArr` :param center: 円の中心座標. :type center: :class:`CvPoint` :param radius: 円の半径. :type radius: int :param color: 円の色. :type color: :class:`CvScalar` :param thickness: 円の枠線の太さ.負の値の場合,円内部が塗りつぶされます. :type thickness: int :param lineType: 円を描く線の種類, :ref:`Line` の説明を参照してください. :type lineType: int :param shift: 中心点の座標と半径の値において,小数点以下の桁を表すビット数. :type shift: int この関数は,与えられた中心と半径を持つ単純な円,または塗りつぶされた円を描きます. .. index:: ClipLine .. _ClipLine: ClipLine -------- `id=0.907527126949 Comments from the Wiki `__ .. function:: ClipLine(imgSize, pt1, pt2) -> (clipped_pt1, clipped_pt2) 線分が画像矩形内に収まるようにクリッピングします. :param imgSize: 画像サイズ. :type imgSize: :class:`CvSize` :param pt1: 線分の1番目の端点. :type pt1: :class:`CvPoint` :param pt2: 線分の2番目の端点. :type pt2: :class:`CvPoint` この関数は,与えられた2点を結ぶ線分のうち,画像矩形内に収まる一部分を求めます. 線分が画像の外側にある場合には None を返します.線分が画像の内側にある場合は,それの新しい2端点のペアを返します. .. index:: DrawContours .. _DrawContours: DrawContours ------------ `id=0.742208191097 Comments from the Wiki `__ .. function:: DrawContours(img,contour,external_color,hole_color,max_level,thickness=1,lineType=8,offset=(0,0))-> None 画像内の外側輪郭線および内側輪郭線を描きます. :param img: 輪郭を描画する画像.他の描画関数と同様に,輪郭も ROI 内に収まるようにクリップされます. :type img: :class:`CvArr` :param contour: 最初の輪郭へのポインタ. :type contour: :class:`CvSeq` :param external_color: 外側輪郭線の色. :type external_color: :class:`CvScalar` :param hole_color: 内側輪郭線(穴)の色. :type hole_color: :class:`CvScalar` :param max_level: 描画される輪郭の最大レベル.0 の場合, ``contour`` のみが描画されます.1 の場合,contourと,それと同レベルの全ての輪郭が描画されます.2 の場合,contourと,それと同レベルと1つ下のレベルの全ての輪郭が描画されます.そして負の値の場合, ``contour`` と同レベルの他の輪郭は描画されず,代わりに ``contour`` の子ノード輪郭が :math:`|\texttt{max\_level}|-1` レベルまで描画されます. :type max_level: int :param thickness: 描かれる輪郭線の太さ.この値が負の場合(例えば,=CV _ FILLED),輪郭の内側が塗りつぶされます. :type thickness: int :param lineType: 輪郭線の種類, :ref:`Line` の説明を参照してください. :type lineType: int この関数は, :math:`\texttt{thickness} \ge 0` の場合は,画像内の輪郭線を描き, :math:`\texttt{thickness} <0` の場合は,輪郭線の内側を塗りつぶします. .. index:: Ellipse .. _Ellipse: Ellipse ------- `id=0.975411458206 Comments from the Wiki `__ .. function:: Ellipse(img,center,axes,angle,start_angle,end_angle,color,thickness=1,lineType=8,shift=0)-> None 楕円,楕円弧,塗りつぶされた楕円,塗りつぶされた扇形を描画します. :param img: 画像. :type img: :class:`CvArr` :param center: 楕円の中心座標. :type center: :class:`CvPoint` :param axes: 楕円の長径と短径. :type axes: :class:`CvSize` :param angle: 回転角度. :type angle: float :param start_angle: 円弧の開始角度. :type start_angle: float :param end_angle: 円弧の終了角度. :type end_angle: float :param color: 楕円の色. :type color: :class:`CvScalar` :param thickness: 楕円を描く線の太さ.負の値の場合,扇形内部が塗りつぶされます. :type thickness: int :param lineType: 楕円の線の種類, :ref:`Line` の説明を参照してください. :type lineType: int :param shift: 中心点の座標と軸長の値において,小数点以下の桁を表すビット数. :type shift: int この関数は,楕円,楕円弧,塗りつぶされた楕円,塗りつぶされた扇形を描画します.これらは,ROI 内に収まるようにクリッピングされます.アンチエイリアスされた弧や線に太さを持つ弧に対しては,piecewise線形近似が用いられます.すべての角度は「度」単位で与えます.これらのパラメータの意味を以下の図で説明します. 楕円弧のパラメータ .. image:: ../../pics/ellipse.png .. index:: EllipseBox .. _EllipseBox: EllipseBox ---------- `id=0.544459054371 Comments from the Wiki `__ .. function:: EllipseBox(img,box,color,thickness=1,lineType=8,shift=0)-> None 楕円,楕円弧,塗りつぶされた楕円,塗りつぶされた扇形を描画します. :param img: 画像. :type img: :class:`CvArr` :param box: 描画される楕円に外接するボックス領域. :type box: :class:`CvBox2D` :param thickness: 楕円の線の太さ. :type thickness: int :param lineType: 楕円の線の種類, :ref:`Line` の説明を参照してください. :type lineType: int :param shift: 矩形の頂点座標において,小数点以下の桁を表すビット数. :type shift: int この関数は,楕円,楕円弧,塗りつぶされた楕円,塗りつぶされた扇形を描画します.これは,別の形状を近似するための楕円,つまり関数 :ref:`CamShift` や関数 :ref:`FitEllipse` などの結果を描く際に便利です.これらは,ROI 内に収まるようにクリッピングされます.また,アンチエイリアスされた弧や線に太さを持つ弧に対しては,piecewise線形近似が用いられます. .. index:: FillConvexPoly .. _FillConvexPoly: FillConvexPoly -------------- `id=0.665568657922 Comments from the Wiki `__ .. function:: FillConvexPoly(img,pn,color,lineType=8,shift=0)-> None 塗りつぶされた凸ポリゴンを描きます. :param img: 画像. :type img: :class:`CvArr` :param pn: 座標ペアのリスト. :type pn: :class:`CvPoints` :param color: ポリゴンの色. :type color: :class:`CvScalar` :param lineType: ポリゴンを描く線の種類, :ref:`Line` の説明を参照してください. :type lineType: int :param shift: ポリゴンの頂点座標において,小数点以下の桁を表すビット数. :type shift: int この関数は,凸ポリゴン内部を塗りつぶします.これは,関数 ``cvFillPoly`` よりも高速に動作します.また,凸ポリゴンだけでなく,その輪郭が水平なスキャンラインと2回以下しか交差しないようような単純なポリゴン(モノトーンポリゴン)は全て塗りつぶすことができます. .. index:: FillPoly .. _FillPoly: FillPoly -------- `id=0.967640328087 Comments from the Wiki `__ .. function:: FillPoly(img,polys,color,lineType=8,shift=0)-> None 塗りつぶされたポリゴンを描きます. :param img: 画像. :type img: :class:`CvArr` :param polys: (x,y)ペアのリストのリスト.点のリストは1つのポリゴンを表します. :type polys: list of lists of (x,y) pairs :param color: ポリゴンの色. :type color: :class:`CvScalar` :param lineType: ポリゴンを描く線の種類, :ref:`Line` の説明を参照してください. :type lineType: int :param shift: ポリゴンの頂点座標において,小数点以下の桁を表すビット数. :type shift: int この関数は,複数の輪郭で区切られた領域を塗りつぶします.この関数では複雑な領域,例えば領域内に穴を持つものや,自己交差したものなども塗りつぶします. .. index:: GetTextSize .. _GetTextSize: GetTextSize ----------- `id=0.893673802005 Comments from the Wiki `__ .. function:: GetTextSize(textString,font)-> (textSize,baseline) 文字列の幅と高さを取得します. :param font: フォント構造タイへのポインタ. :type font: :class:`CvFont` :param textString: 入力文字列. :type textString: str :param textSize: 取得される文字列のサイズ.ベースラインより下は,文字列の高さには含まれません. :type textSize: :class:`CvSize` :param baseline: 文字列の最下点から見たベースラインのy座標. :type baseline: int この関数は,指定されたフォントで描かれた文字列を内包する矩形のサイズを計算します. .. index:: InitFont .. _InitFont: InitFont -------- `id=0.921030764373 Comments from the Wiki `__ .. function:: InitFont(fontFace,hscale,vscale,shear=0,thickness=1,lineType=8)-> font フォント構造体を初期化します. :param font: この関数によって初期化されるフォント構造タイへのポインタ. :type font: :class:`CvFont` {フォント名の識別子.現在は,Hershey fonts( http://sources.isc.org/utils/misc/hershey-font.txt )の一部のみがサポートされています: * **CV_FONT_HERSHEY_SIMPLEX** 普通サイズの sans-serif フォント * **CV_FONT_HERSHEY_PLAIN** 小さいサイズの sans-serif フォント * **CV_FONT_HERSHEY_DUPLEX** 普通サイズの sans-serif フォント( ``CV_FONT_HERSHEY_SIMPLEX`` よりも複雑) * **CV_FONT_HERSHEY_COMPLEX** 普通サイズの serif フォント * **CV_FONT_HERSHEY_TRIPLEX** 普通サイズの serif フォント( ``CV_FONT_HERSHEY_COMPLEX`` よりも複雑) * **CV_FONT_HERSHEY_COMPLEX_SMALL** ``CV_FONT_HERSHEY_COMPLEX`` の小さいサイズ版 * **CV_FONT_HERSHEY_SCRIPT_SIMPLEX** 手書きスタイルのフォント * **CV_FONT_HERSHEY_SCRIPT_COMPLEX** ``CV_FONT_HERSHEY_SCRIPT_SIMPLEX`` の複雑版 このパラメータは,上記の値と,イタリック(斜字)を意味するオプションフラグ ``CV_FONT_ITALIC`` の組み合わせをとることができます. :param hscale: 水平方向スケール.これが ``1.0f`` ならば,文字はフォント毎のデフォルトの幅になり, ``0.5f`` ならば,オリジナルの半分の幅になります. :type hscale: float :param vscale: 垂直方向スケール.これが ``1.0f`` ならば,文字はフォント毎のデフォルトの高さになり, ``0.5f`` ならば,オリジナルの半分の高さになります. :type vscale: float :param shear: 垂直線に対する文字の傾き(相対角度)を近似するタンジェント値.これが 0 ならば,非イタリックフォントであり, ``1.0f`` ならば,文字が45度傾いていることを意味します. :type shear: float :param thickness: 文字の線の太さ. :type thickness: int :param lineType: 文字の線の種類, :ref:`Line` の説明を参照してください. :type lineType: int この関数は,文字列描画関数に渡されるフォント構造体を初期化します. .. index:: InitLineIterator .. _InitLineIterator: InitLineIterator ---------------- `id=0.651434656731 Comments from the Wiki `__ .. function:: InitLineIterator(image, pt1, pt2, connectivity=8, left_to_right=0) -> line_iterator ラインイテレータを初期化します. :param image: 線をサンプルする対象となる画像. :type image: :class:`CvArr` :param pt1: 線分の 1 番目の端点. :type pt1: :class:`CvPoint` :param pt2: 線分の 2 番目の端点. :type pt2: :class:`CvPoint` :param connectivity: 走査される線分の接続連結,4 連結あるいは 8 連結. :type connectivity: int :param left_to_right: ( :math:`\texttt{left\_to\_right} = 0` ) ならば,指定方向,つまり ``pt1`` から ``pt2`` に向かって走査されます.また ( :math:`\texttt{left\_to\_right} \ne 0` ) ならば,左端から右端に向かって走査されます. :type left_to_right: int :param line_iterator: 線分上ピクセルを走査するイテレータ. :type line_iterator: :class:`iter` この関数は,2点を結ぶ直線上のピクセルを走査するイテレータを返します. この線分上の点は,4-連結,あるいは8-連結ブレゼンハムアルゴリズムを用いて1つずつ計算されます. 例:ラインイテレータを利用し,色付きの線分に沿ったピクセル値の合計を計算します. .. doctest:: >>> import cv >>> img = cv.LoadImageM("building.jpg", cv.CV_LOAD_IMAGE_COLOR) >>> li = cv.InitLineIterator(img, (100, 100), (125, 150)) >>> red_sum = 0 >>> green_sum = 0 >>> blue_sum = 0 >>> for (r, g, b) in li: ... red_sum += r ... green_sum += g ... blue_sum += b >>> print red_sum, green_sum, blue_sum 10935.0 9496.0 7946.0 .. また, `zip `_ を利用して,より簡潔にできます: .. doctest:: >>> import cv >>> img = cv.LoadImageM("building.jpg", cv.CV_LOAD_IMAGE_COLOR) >>> li = cv.InitLineIterator(img, (100, 100), (125, 150)) >>> print [sum(c) for c in zip(*li)] [10935.0, 9496.0, 7946.0] .. .. index:: Line .. _Line: Line ---- `id=0.988623625351 Comments from the Wiki `__ .. function:: Line(img,pt1,pt2,color,thickness=1,lineType=8,shift=0)-> None 2点を結ぶ線分を描きます. :param img: 画像. :type img: :class:`CvArr` :param pt1: 線分の1番目の端点. :type pt1: :class:`CvPoint` :param pt2: 線分の2番目の端点. :type pt2: :class:`CvPoint` :param color: 線分の色. :type color: :class:`CvScalar` :param thickness: 線分の太さ. :type thickness: int :param lineType: 線分の種類: * **8** (あるいは,省略時)8連結. * **4** 4連結. * **CV_AA** アンチエイリアス. :type lineType: int :param shift: 点の座標において,小数点以下の桁を表すビット数. :type shift: int この関数は,画像上に ``pt1`` と ``pt2`` の2点を結ぶ線分を描きます.この線は,画像あるいは ROI 内に収まるようにクリッピングされます.整数座標を持ちアンチエイリアスされない線分に対しては,8連結あるいは4連結のブレゼンハムアルゴリズムが用いられます.また,太い線分の端は丸く描画されます.アンチエイリアスされる線分は,ガウシアンフィルタを使って描画されます.線分の色を指定するには, ``CV_RGB( r, g, b )`` を利用すれば良いでしょう. .. index:: PolyLine .. _PolyLine: PolyLine -------- `id=0.82458756786 Comments from the Wiki `__ .. function:: PolyLine(img,polys,is_closed,color,thickness=1,lineType=8,shift=0)-> None 折れ線,または塗りつぶされていないポリゴンを描きます. :param polys: (x,y)ペアのリストのリスト.点のリストは1つのポリゴンを表します. :type polys: list of lists of (x,y) pairs :param img: 画像. :type img: :class:`CvArr` :param is_closed: ポリゴンが閉じているかどうかを指定します.閉じている場合,各輪郭の最後の頂点と最初の頂点を結ぶ線分が描画されます. :type is_closed: int :param color: 線の色. :type color: :class:`CvScalar` :param thickness: 線の辺の太さ. :type thickness: int :param lineType: 線の種類, :ref:`Line` の説明を参照してください. :type lineType: int :param shift: ポリゴンの頂点座標において,小数点以下の桁を表すビット数. :type shift: int この関数は,1つまたは複数の折れ線,ポリゴンを描きます. .. index:: PutText .. _PutText: PutText ------- `id=0.464930805455 Comments from the Wiki `__ .. function:: PutText(img,text,org,font,color)-> None 文字列を描画します. :param img: 入力画像. :type img: :class:`CvArr` :param text: 描画される文字列. :type text: str :param org: 先頭の文字の左下の座標. :type org: :class:`CvPoint` :param font: フォント構造体へのポインタ. :type font: :class:`CvFont` :param color: 文字列の色. :type color: :class:`CvScalar` この関数は,指定されたフォントと色を用いて画像中に文字列を描きます.描画された文字列は ROI 内に収まるようにクリッピングされます.指定されたフォントに含まれないシンボルは,四角形で置き換えられます. .. index:: Rectangle .. _Rectangle: Rectangle --------- `id=0.662262176698 Comments from the Wiki `__ .. function:: Rectangle(img,pt1,pt2,color,thickness=1,lineType=8,shift=0)-> None 矩形,あるいは塗りつぶされた矩形を描画します. :param img: 画像. :type img: :class:`CvArr` :param pt1: 矩形の1つの頂点. :type pt1: :class:`CvPoint` :param pt2: 矩形の反対側の頂点. :type pt2: :class:`CvPoint` :param color: 線の色(RGB),あるいは輝度値(グレースケール). :type color: :class:`CvScalar` :param thickness: 矩形の線の太さ.負の値(例えば,CV _ FILLED)の場合,矩形が塗りつぶされます. :type thickness: int :param lineType: 線の種類, :ref:`Line` の説明を参照してください. :type lineType: int :param shift: 頂点の座標において,小数点以下の桁を表すビット数. :type shift: int この関数は,対角に位置する2つの頂点 ``pt1`` と ``pt2`` を持つ矩形を描きます. .. index:: CV_RGB .. _CV_RGB: CV_RGB ------ `id=0.830247862369 Comments from the Wiki `__ .. function:: CV_RGB(red,grn,blu)->CvScalar カラー値を作成します. :param red: 赤の成分. :type red: float :param grn: 緑の成分. :type grn: float :param blu: 青の成分. :type blu: float