opencv は、画像上にさまざまな幾何学的形状 (線、長方形、円、楕円など)、テキスト、曲線を描画します。

記事ディレクトリ


OpenCV を使用して透明な画像を作成し、画像内に線、長方形、円、楕円、およびテキストを描画します。

OpenCV 描画イメージのいくつかのアプリケーション:

  • 画像注釈: 画像に注釈や注釈を追加します。たとえば、オブジェクト検出タスクや画像分類タスクで、画像上にボックス、ラベル、その他の情報を描画して、検出されたオブジェクトをマークします。
  • 後処理表示:たとえば、画像処理中に、処理前と処理後の画像上に比較表を描画し、画像処理の効果を直感的に表示できます。
  • リアルタイム表示: ビデオ処理で処理されたビデオストリームを出力し、リアルタイムで画面上にレンダリングするなど、画面上に継続的に描画し、エフェクトをリアルタイムで表示することで実現されます。

cv::Mat は、OpenCV で画像を表すデータ構造であり、マルチチャネル画像を保存できます。

cv::Scalar は、ピクセルの色とアルファ値を表すために使用される 4 チャネルの実数ベクトルです。

cv::Point は、ピクセル点の座標を表すために使用される 2 次元の整数ベクトルです。

cv::Size(width, height) サイズ クラスの 2 つのデータ メンバーは、width と height と呼ばれます。

cv::ones(): 各ピクセルの最初のチャネルが 1 で、残りの 2 つのチャネルが 0, であることに相当しますScalar(1,0,0)

cv::zeros(): 黒​​のイメージを作成するのと同等で、各ピクセルの各チャネルは 0, ですScalar(0,0,0)

cv::line 関数は、画像上に直線を描くために使用されます。

cv::rectangle 関数は、画像上に四角形を描画するために使用されます。

cv::circle 関数は、画像上に円を描画するために使用されます。

cv::ellipse 関数は、画像上に楕円を描画するために使用されます。

cv::putText 関数は、画像上にテキストを描画するために使用されます。

機能紹介:

1. 直線を描きます。

1. line() 関数: 画像上に直線を描くために使用されます。
(1) 関数プロトタイプ:
void cv::line( InputOutputArray img, 
	       Point pt1, 
	       Point pt2, 
               const Scalar& color,
               int thickness = 1, 
               LineTypes lineType = LINE_8, 
               int shift = 0 );
参数解释:
img:输入输出参数,表示待绘制的目标图像;
pt1: 输入参数,表示的是直线的起点坐标(是一个 cv::Point 类型的对象);
pt2: 输入参数,表示的是直线的终点坐标(是一个 cv::Point 类型的对象);
color: 输入参数,表示绘制直线的颜色以及透明度,是一个 cv::Scalar 类型的对象,常见的颜色有(
	红色(0, 0, 255);
	绿色(0, 255, 0);
	蓝色(255, 0, 0)等;)
thickness: 可选参数,表示绘制直线线条的宽度:(
	默认值为1,表示绘制一个线条宽度为1像素的直线;
	如果设置为负值,则表示绘制一条填充直线;)
lineType:可选参数,表示绘制直线的类型,可以取以下几个值:( 
	cv::LINE_4,默认值,表示绘制一条 4 连通的直线;
	cv::LINE_8: 表示绘制一条 8 连通的直线;
	cv::LINE_AA: 表示绘制一条抗锯齿的直线;)
shift:可选参数,坐标点的小数点位数,默认为 0
(2) サンプルコード:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;

int main() {
    
    

	// 创建一张大小为 512x512,具有 alpha 通道的透明图片
	cv::Mat img( 512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0) );
	// 在图片上绘制一条直线
	cv::line( img, cv::Point(300, 100), cv::Point(450, 100), cv::Scalar(0, 255, 0, 255), 3 );
	// 显示图片
	imshow("img", img);

	waitKey();
	destroyAllWindows();
	return 0;
}

2. 四角形を描画するには、最初に Rect() クラスを使用して四角形を初期化してから、rectangle() 関数を使用して四角形を描画する必要があります。

1. Rect() 長方形クラス

Rect() 長方形クラスの主な機能は、長方形を初期化してから、rectangle() 関数を使用して長方形を描画することです。

コンストラクタ:
Rect rect(int x, int y, int width, int height);
// 初始化Rect()矩形类
Rect rect(100, 50, 50, 100);

创建矩形对象的构造函数有四个参数,左上角的坐标(x,y)和矩阵的宽度和高度
Rect クラスのメンバー関数:

(1)rect.size()とrect.area()、およびrect.width()とrect.height()は、長方形の幅、高さ、サイズ、面積を記述するために使用されます。

  • ect.width() // 長方形の幅 50 を返します
  • ect.height() // 長方形の高さ 100 を返します
  • rect.size() // 四角形のサイズを返します [50 × 100]
  • rect.area() // 長方形5000の面積を返す

(2) 直交座標点を記述するために使用される br() および tl()

  • ect.br() // 四角形の右下隅の座標を返します [150, 150]
  • rect.tl() // 四角形の左上隅の座標を返します [100, 50]

(3) rect.contains(Point(x, y)) および rect.inside(Point(x, y)) は、点が四角形内にあるかどうかを判断するために使用され、戻り値は bool 型です

  • rect.contains(Point(x, y)) // Rect に Point(x, y) が含まれるかどうかを判断します。2 つの関数の使用法は同じです。
  • rect.inside(Point(x, y)) // Rect に Point(x, y) が含まれるかどうかを判断します。2 つの関数の使用法は同じです。

(4) 四角形を比較し、ブール変数を返します。

  • 長方形 1 == 長方形 2
  • 長方形 1 != 長方形 2

(5) 長方形を移動および拡大縮小します。

Rect クラスは、Point 型変数に追加するだけで長方形の変換を実現し、Size 型変数に追加して長方形のスケーリングを実現します。

  • rect = rect + Point(-100, 100); // 平行移動、つまり左上の頂点の x 座標 -100、y 座標 +100
  • rect = rect + Size(-100, 100); // スケーリング、左上の頂点は変更されず、幅 -100、高さ +100

(6) 延長

1、OpenCV里没有判断rect1是否在rect2里面的功能,所以自己写一个 
bool isInside(Rect rect1, Rect rect2)  
{
    
      
    return (rect1 == (rect1&rect2));  
}  

2、OpenCV没有获取矩形中心点的功能,自己写一个  
Point getCenterPoint(Rect rect)  
{
    
      
    Point cpt;  
    cpt.x = rect.x + cvRound(rect.width/2.0);  
    cpt.y = rect.y + cvRound(rect.height/2.0);  
    return cpt;  
}  
  
3、围绕矩形中心缩放函数  
Rect rectCenterScale(Rect rect, Size size)  
{
    
      
    rect = rect + size;   
    Point pt;  
    pt.x = cvRound(size.width/2.0);  
    pt.y = cvRound(size.height/2.0);  
    return (rect-pt);  
}  

(7) 長方形演算、2 つの長方形の交差と和を求めます。

  • 四角形 = 四角形 1 & 四角形 2
  • 四角形 = 四角形 1 | 長方形2
Mat m1 = imread("1.jpg");
Mat m2 = imread("1.jpg");
Rect rect1(0,0,300,300);
Rect rect2(0, 0, 100, 100);
Scalar s(255, 255, 0);

Rect rt1 = rect1 & rect2; //取并集
rectangle(m1, rt1, s);
Rect rt2 = rect1 | rect2; //取交集
rectangle(m2, rt2, s);
imshow("交集", m1);
imshow("并集", m2);
2. Rectangle() 関数

Rectangle() 関数の主な機能は、画像の指定された領域に長方形の境界線を追加することです。これは通常、画像処理の対象領域を視覚化するために画像のマークに使用され、画像処理の対象領域を視覚化するのに便利です。ターゲット領域を処理します。

(1) 関数プロトタイプ 1:
void rectangle( InputOutputArray img,
	 	Rect 	rect,
		const 	Scalar &color,
		int 	thickness = 1,
		int 	lineType = LINE_8,
		int 	shift = 0 )

参数解释:
img:输入输出参数,表示待绘制的目标图像;
rect:输入参数,使用Rect()定义的矩形;
color: 输入参数,表示绘制矩形的颜色以及透明度,是一个 cv::Scalar 类型的对象,常见的颜色有(
	红色(0, 0, 255);
	绿色(0, 255, 0);
	蓝色(255, 0, 0)等;)
thickness:可选参数,表示矩形边框的宽度:(
	默认值为1,表示绘制矩形的边框线条宽度为1像素;;
	thickness小于0表示绘制一个填充矩形,即一个实心矩形;
	thickness小于0表示绘制一个矩形框,矩形边框的宽度为thickness的值;)
lineType:可选参数,表示矩形边框的类型,可以取以下几个值:(
	cv::LINE_4: 表示绘制四个相邻的点的矩形边框,默认值;
	cv::LINE_8: 表示绘制八个相邻的点的矩形边框;
	cv::LINE_AA: 表示绘制抗锯齿的矩形边框;)
shift:可选参数,坐标点的小数点位数,默认为 0

サンプルコード:

#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;

int main() {
    
    

	// 创建一张大小为 512x512,具有 alpha 通道的透明图片
	cv::Mat img(512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0));
	// 初始化一个矩形A
	cv::Rect rectA;
	rectA.x = 100;
	rectA.y = 100;
	rectA.width = 100;
	rectA.height = 100;
	// thickness小于0表示绘制一个填充矩形,即一个实心矩形
	cv::rectangle(img, rectA, Scalar(0, 255, 0), -1);

	// 初始化一个矩形B
	cv::Rect rectB;
	rectB.x = 300;
	rectB.y = 300;
	rectB.width = 100;
	rectB.height = 100;
	// thickness大于0表示绘制一个矩形框
	cv::rectangle(img, rectB, Scalar(0, 0, 255), 2);


	// 显示图片
	imshow("img", img);

	waitKey();
	destroyAllWindows();
	return 0;
}

(2) 関数プロトタイプ 2:
void rectangle( InputOutputArray img,
		Point(i, j) pt1, 
		Point(i+img.cols, j+img.rows) pt2,
                const Scalar &color, 
		int thickness = 1,
                int lineType = LINE_8, 
		int shift = 0 );

参数解释:
img:输入输出参数,表示待绘制的目标图像;
pt1:矩形左上角顶点的坐标;
pt2:矩形对角线上,右下角顶点的坐标;
color: 输入参数,表示绘制矩形的颜色以及透明度,是一个 cv::Scalar 类型的对象,常见的颜色有(
	红色(0, 0, 255);
	绿色(0, 255, 0);
	蓝色(255, 0, 0)等;)
thickness:可选参数,表示矩形边框的宽度:(
	默认值为1,表示绘制矩形的边框线条宽度为1像素;
	thickness小于0表示绘制一个填充矩形,即一个实心矩形;
	thickness大于0表示绘制一个矩形框,矩形边框的宽度为thickness的值;)
lineType:可选参数,表示矩形边框的类型,可以取以下几个值:(
	cv::LINE_4: 表示绘制四个相邻的点的矩形边框,默认值;
	cv::LINE_8: 表示绘制八个相邻的点的矩形边框;
	cv::LINE_AA: 表示绘制抗锯齿的矩形边框;)
shift:可选参数,坐标点的小数点位数,默认为 0

サンプルコード:

#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;

int main() {
    
    

	// 创建一张大小为 512x512,具有 alpha 通道的透明图片
	cv::Mat img(512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0));
	// thickness小于0表示绘制一个填充矩形,即一个实心矩形
	cv::rectangle(img, cv::Point(100, 100), cv::Point(200, 200), cv::Scalar(0, 255, 0, 255), -1);
	// thickness大于0表示绘制一个矩形框
	cv::rectangle(img, cv::Point(300, 300), cv::Point(400, 400), cv::Scalar(0, 0, 255, 255), 2);
	// 显示图片
	imshow("img", img);

	waitKey();
	destroyAllWindows();
	return 0;
}

ここに画像の説明を挿入

3. 円を描く

1.circle() 関数: 画像上に円を描画するために使用されます。
(1) 関数プロトタイプ:
void cv::circle( InputOutputArray img, 
		 Point center, 
		 int radius, 
		 const Scalar &color,
                 int thickness = 1, 
		 LineTypes lineType = LINE_8, 
                 int shift = 0 );

参数解释:
img:输入输出参数,表示待绘制的目标图像;
center:输入参数,表示圆心坐标(是一个 cv::Point 类型的对象);
radius:输入参数,表示圆的半径;
color: 输入参数,表示绘制圆的颜色以及透明度,是一个 cv::Scalar 类型的对象,常见的颜色有(
	红色(0, 0, 255);
	绿色(0, 255, 0);
	蓝色(255, 0, 0)等;)
thickness:可选参数,表示圆形边框的宽度:(
	默认值为1,表示绘制圆的边框线条宽度为1像素;
	thickness小于0表示绘制一个填充圆,即一个实心圆;
	thickness大于0表示绘制一个圆形框,圆形边框的宽度为thickness的值;)
lineType:可选参数,表示圆形边框的类型,可以取以下几个值:(
	cv::LINE_4: 表示绘制四个相邻的点的圆边界,默认值;
	cv::LINE_8: 表示绘制八个相邻的点的圆边界;
	cv::LINE_AA: 表示绘制抗锯齿的圆边界;)
shift:可选参数,坐标点的小数点位数,默认为 0
(2) サンプルコード:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;


int main() {
    
    

	// 创建一张大小为 512x512,具有 alpha 通道的透明图片
	cv::Mat img(512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0));

	// thickness小于0表示绘制一个填充圆,即一个实心圆
	cv::circle(img, cv::Point(100, 100), 50, cv::Scalar(0, 255, 0, 255), -1);

	// thickness大于0表示绘制一个圆形框
	cv::circle(img, cv::Point(200, 200), 50, cv::Scalar(0, 0, 255, 255), 1);
	// 显示图片
	imshow("img", img);

	waitKey();
	destroyAllWindows();
	return 0;
}

4. 楕円を描く

1. ellipse() 関数: 画像上に楕円を描画するために使用されます。
(1) 関数プロトタイプ:
void cv::ellipse(
	InputOutputArray img,
	Point 		 center,
	Size 		 axes,
	double 		 angle,
	double 		 startAngle,
	double 		 endAngle,
	const Scalar 	 &color,
	int 		 thickness = 1,
	int 		 lineType = LINE_8,
	int 		 shift = 0
)

参数解释:
img:输入输出参数,表示待绘制的目标图像;
center:输入参数,表示椭圆中心点坐标(是一个 cv::Point 类型的对象);
axes:输入参数,椭圆的长轴和短轴,是一个 cv::Size(width, height) 类型的对象;
angle:输入参数,绘制出的椭圆沿水平方向旋转的角度,举个例子(
	0   -> 水平,不旋转
	60  -> 水平防线旋转60)
startAngle:输入参数,开始绘制角度,与endAngle搭配使用,可以决定椭圆绘制的方向,举个例子(
	0   ->0度开始绘制,到endAngle结束绘制;
	360  ->360度开始绘制,到endAngle结束绘制;
)
endAngle:输入参数,结束绘制角度,与startAngle搭配使用,可以决定椭圆绘制的方向,举个例子(
	0   -> 从startAngle开始绘制,绘制到0度结束绘制;
	360  -> 从startAngle开始绘制,绘制到360度结束绘制;
)
color: 输入参数,表示绘制椭圆的颜色以及透明度,是一个 cv::Scalar 类型的对象,常见的颜色有(
	红色(0, 0, 255);
	绿色(0, 255, 0);
	蓝色(255, 0, 0)等;)
thickness:可选参数,表示椭圆形边框的宽度:(
	默认值为1,表示绘制椭圆形的边框线条宽度为1像素;
	thickness小于0表示绘制一个填充椭圆,即一个实心椭圆;
	thickness大于0表示绘制一个椭圆形框,圆形边框的宽度为thickness的值;)
lineType:可选参数,表示椭圆形边框的类型,可以取以下几个值:(
	cv::LINE_4: 表示绘制四个相邻的点的椭圆边界,默认值;
	cv::LINE_8: 表示绘制八个相邻的点的椭圆边界;
	cv::LINE_AA: 表示绘制抗锯齿的椭圆边界;)
shift:可选参数,坐标点的小数点位数,默认为 0
(2) サンプルコード:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;

int main() {
    
    

	// 创建一张大小为 512x512,具有 alpha 通道的透明图片
	cv::Mat img(512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0));

	// thickness小于0表示绘制一个填充圆,即一个实心圆
	ellipse(img, Point(100, 100), Size(60, 30), 0, 0, 360, Scalar(0, 0, 255), -1, LINE_8);

	// thickness大于0表示绘制一个圆形框
	ellipse(img, Point(200, 200), Size(60, 30), 0, 0, 360, Scalar(0, 0, 255), 1, LINE_8);

	// angle=90,绘制出的椭圆沿水平方向旋转90度
	ellipse(img, Point(300, 300), Size(60, 30), 90, 0, 360, Scalar(0, 0, 255), -1, LINE_8);

	// startAngle=0,endAngle=180,逆时针开始绘制椭圆,绘制180度,结束绘制
	ellipse(img, Point(400, 400), Size(60, 30), 0, 0, 180, Scalar(0, 0, 255), -1, LINE_8);

	// startAngle=360,endAngle=180,顺时针开始绘制椭圆,绘制180度,结束绘制
	ellipse(img, Point(400, 500), Size(60, 30), 0, 360, 180, Scalar(0, 0, 255), -1, LINE_8);

	// 显示图片
	imshow("img", img);

	waitKey();
	destroyAllWindows();
	return 0;
}

5. 多角形の描画と塗りつぶし

1.polylines(): 描画できる多角形の枠は 1 つだけです

Opencv は、描画と塗りつぶしを実現するために厚さパラメータを設定することにより、共通の点、線、円、楕円、および長方形の描画と塗りつぶしをサポートします。厚さが正の場合は描画され、厚さが正でない場合は描画されます。充填;

ただし、多角形の場合、polylines() 関数が厚さを正以外の数値に設定すると、エラーが直接報告され、厚さを変更しても塗りつぶしを完了できません。この関数は多角形のフレームのみを描画できます。

(1) 関数プロトタイプ:
void cv::polylines(
         InputOutputArray      img,
         InputArrayOfArrays    pts,
         bool                  isClosed,
         const Scalar          &color,
         int                   thickness = 1,
         int                   lineType = LINE_8,
         int                   shift = 0
)

参数解释:
img:输入输出参数,表示待绘制的目标图像;
pts:输入参数,表示多边形的顶点坐标集合(是一个 std::vector<Point> pts 类型的对象);
isClosed:表示是否闭合,默认闭合;
color: 输入参数,表示绘制多边形的颜色以及透明度,是一个 cv::Scalar 类型的对象,常见的颜色有(
	红色(0, 0, 255);
	绿色(0, 255, 0);
	蓝色(255, 0, 0)等;)
thickness:可选参数,表示多边形边框的宽度,polylines()函数的thickness必须是正数;
lineType:可选参数,表示多边形边框的类型,可以取以下几个值:(
	cv::LINE_4: 表示绘制四个相邻的点的多边形边界,默认值;
	cv::LINE_8: 表示绘制八个相邻的点的多边形边界;
	cv::LINE_AA: 表示绘制抗锯齿的多边形边界;)
shift:可选参数,坐标点的小数点位数,默认为 0
(2) サンプルコード:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;


int main() {
    
    

	// 创建一张大小为 512x512,3通道的图片
	Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
	int w = canvas.cols;
	int h = canvas.rows;
	Point p1(100, 100);
	Point p2(300, 150);
	Point p3(300, 350);
	Point p4(250, 450);
	Point p5(50, 450);
	std::vector<Point> pts;
	pts.push_back(p1);
	pts.push_back(p2);
	pts.push_back(p3);
	pts.push_back(p3);
	pts.push_back(p4);
	pts.push_back(p5);
	// 绘制多边形
	polylines(canvas, pts, true, Scalar(0, 255, 0), 1, 8, 0);

	// 显示图片
	imshow("canvas", canvas);

	waitKey();
	destroyAllWindows();
	return 0;
}

2. fillPoly(): 描画できる塗りつぶされた多角形は 1 つだけです。つまり、塗りつぶされた多角形です。

fillPoly() 関数: 厚さと isClose パラメーターはありません。この関数は塗りつぶされた多角形、つまり塗りつぶされた多角形のみを描画できます。

(1) 関数プロトタイプ:
void cv::fillPoly(   
         InputOutputArray      img,
         InputArrayOfArrays    pts,
         const Scalar 	       &color,
         int                   lineType = LINE_8,
         int                   shift = 0,
)

参数解释:
img:输入输出参数,表示待绘制的目标图像;
pts:输入参数,表示多边形的顶点坐标集合(是一个 std::vector<Point> pts 类型的对象);
color: 输入参数,表示绘制多边形的颜色以及透明度,是一个 cv::Scalar 类型的对象,常见的颜色有(
	红色(0, 0, 255);
	绿色(0, 255, 0);
	蓝色(255, 0, 0)等;)
lineType:可选参数,表示多边形边框的类型,可以取以下几个值:(
	cv::LINE_4: 表示绘制四个相邻的点的多边形边界,默认值;
	cv::LINE_8: 表示绘制八个相邻的点的多边形边界;
	cv::LINE_AA: 表示绘制抗锯齿的多边形边界;)
shift:可选参数,坐标点的小数点位数,默认为 0
(2) サンプルコード:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;

int main() {
    
    

	// 创建一张大小为 512x512,3通道的图片
	Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
	int w = canvas.cols;
	int h = canvas.rows;
	Point p1(100, 100);
	Point p2(300, 150);
	Point p3(300, 350);
	Point p4(250, 450);
	Point p5(50, 450);
	std::vector<Point> pts;
	pts.push_back(p1);
	pts.push_back(p2);
	pts.push_back(p3);
	pts.push_back(p3);
	pts.push_back(p4);
	pts.push_back(p5);

	// 绘制一个多边形框
	//polylines(canvas, pts, true, Scalar(0, 255, 255), 1, LINE_8, 0);
	// 绘制一个实心多边形
	fillPoly(canvas, pts, Scalar(255, 0, 255), LINE_8, 0);

	// 显示图片
	imshow("canvas", canvas);

	waitKey();
	destroyAllWindows();
	return 0;
}

3.drawContours() 関数: 多角形の境界線と実線の多角形の両方を描画できます。
  • 任意の数のポリゴン境界線またはソリッド ポリゴンを一度に描画できます。
  • 点、線、円、楕円、長方形の描画と塗りつぶしと同様に、描画と塗りつぶしは太さパラメータを設定することで実現されます。太さが正の数の場合は描画され、太さが正の数でない場合は描画されます。 、満たされます。
(1) 関数プロトタイプ:
 void cv::drawContours (  
     InputOutputArray      image,
     InputArrayOfArrays    contours,
     int                   contourIdx,
     const Scalar          &color,
     int                   thickness = 1,
     int                   lineType = LINE_8,
     InputArray            hierarchy = noArray(),
     int                   maxLevel = INT_MAX
)

参数解释:
image:输入输出参数,表示待绘制的目标图像;
contours:输入参数,contours是个二维嵌套数组,可以存储多个多边形,数组中的元素,存储的是一个个多边形顶点坐标的集合(contours是一个 std::vector<std::vector<Point>> contours 类型的对象);
contourIdx:输入参数,表示绘制指定索引的多边形(contours里是多个集合,绘制哪一个集合,用contourIdx指定;contourIdx大于0表示绘制指定索引的集合,小于0表示绘制全部集合)  
color: 输入参数,表示绘制多边形的颜色以及透明度,是一个 cv::Scalar 类型的对象,常见的颜色有(
	红色(0, 0, 255);
	绿色(0, 255, 0);
	蓝色(255, 0, 0)等;)
thickness:可选参数,表示多边形边框的宽度:(
	默认值为1,表示绘制多边形的边框线条宽度为1像素;
	thickness小于0表示绘制一个填充多边形,即一个实心多边形;
	thickness大于0表示绘制一个多边形边框,多边形边框的宽度为thickness的值;)
lineType:可选参数,表示多边形边框的类型,可以取以下几个值:(
	cv::LINE_4: 表示绘制四个相邻的点的多边形边界,默认值;
	cv::LINE_8: 表示绘制八个相邻的点的多边形边界;
	cv::LINE_AA: 表示绘制抗锯齿的多边形边界;)
hierarchy:可选参数,
maxLevel:可选参数,

(2) サンプルコード:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;

int main() {
    
    

	// 创建一张大小为 512x512,3通道的图片
	Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
	int w = canvas.cols;
	int h = canvas.rows;
	// 第1个多边形
	Point p1(100, 100);
	Point p2(300, 150);
	Point p3(300, 350);
	Point p4(250, 450);
	Point p5(50, 450);
	std::vector<Point> pts1;
	pts1.push_back(p1);
	pts1.push_back(p2);
	pts1.push_back(p3);
	pts1.push_back(p3);
	pts1.push_back(p4);
	pts1.push_back(p5);
	// 第2个多边形
	Point p6(200, 200);
	Point p7(300, 200);
	Point p8(400, 450);
	Point p9(350, 350);
	Point p10(60, 500);
	std::vector<Point> pts2;
	pts2.push_back(p6);
	pts2.push_back(p7);
	pts2.push_back(p8);
	pts2.push_back(p9);
	pts2.push_back(p10);

	std::vector<std::vector<Point>> contours;
	contours.push_back(pts1);
	contours.push_back(pts2);
	// 绘制contours中第1个多边形边框
	drawContours(canvas, contours, 0, Scalar(0, 0, 255), 1, 8);
	// 绘制contours中第2个多边形边框
	drawContours(canvas, contours, 1, Scalar(0, 255, 0), 1, 8);

	// 显示图片
	imshow("canvas", canvas);

	waitKey();
	destroyAllWindows();
	return 0;
}

6. テキストを描画する

1. putText() 関数は、画像上にテキストを描画するために使用されます。
(1) 関数プロトタイプ:
void cv::putText( 
	InputOutputArray img, 
	const String     &text, 
	Point            org, 
        int              fontFace,
        double           fontScale, 
	Scalar           color, 
        int              thickness = 1, 
        int              lineType = LINE_8,
        bool             bottomLeftOrigin = false
)

参数解释:
image:输入输出参数,表示待绘制的目标图像;
text:输入参数,表示要绘制的文本字符串;
org:输入参数,表示文本框左下角的坐标点(是一个 cv::Point 类型的对象);
fontFace:输入参数,表示字体的类型,可以取以下几个值(
	cv::FONT_HERSHEY_COMPLEX:复杂风格字体;
	cv::FONT_HERSHEY_COMPLEX_SMALL:小字号复杂风格字体;
	cv::FONT_HERSHEY_DUPLEX:双线条字体;
	cv::FONT_HERSHEY_PLAIN:单线条字体;
	cv::FONT_HERSHEY_SIMPLEX:正常大小的字体;
	cv::FONT_HERSHEY_TRIPLEX:三线条字体;
)
fontScale:输入参数,表示字体大小缩放比例;
color: 输入参数,表示绘制文本的颜色以及透明度,是一个 cv::Scalar 类型的对象,常见的颜色有(
	红色(0, 0, 255);
	绿色(0, 255, 0);
	蓝色(255, 0, 0)等;)
thickness:可选参数,表示文本轮廓线条的宽度:(
	默认值为1,表示绘制文本轮廓线条宽度为1像素;
	thickness大于0表示绘制文本轮廓线条宽度为thickness的值;小于0表示绘制一个填充文本)
lineType:可选参数,表示文本轮廓线条的类型,可以取以下几个值:(
	cv::LINE_4: 表示绘制四个相邻的点的文本边界,默认值;
	cv::LINE_8: 表示绘制八个相邻的点的文本边界;
	cv::LINE_AA: 表示绘制抗锯齿的文本边界;)
bottomLeftOrigin:可选参数,表示坐标点是否为文本框左下角的坐标点(
	默认值为 false,表示坐标点为文本框左下角的坐标点;
	设置成 true,表示坐标点为文本框左上角的坐标点;
)

(2) サンプルコード:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;

int main() {
    
    

	// 创建一张大小为 512x512,3通道的图片
	Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
	// 待绘制的文本
	std::string text = "Hello, OpenCV!";
	// 开始绘制文本
	cv::putText(canvas, text, cv::Point(0, 0), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255, 255), 2, LINE_8, true);

	// 显示图片
	imshow("canvas", canvas);

	waitKey();
	destroyAllWindows();
	return 0;
}

おすすめ

転載: blog.csdn.net/qq_33867131/article/details/131552307