OpenCV学習:基本的な画像操作(4):幾何学的図形の描画

APIの紹介

//基础数据结构
//点
Point p1=Point(100,100)
Point p2; p2.x = 200; p2.y = 300;

//矩阵
Rect rect = Rect(200,100,300,300);
//起点x,y,长300,宽300

//颜色向量
Scalar color = Scalar(0,0,255);

//画线
line(bgImage,p1,p2,color,1,LINE_8);
//背景图片,起点,终点,颜色向量,线条粗细,线条类型
//线条类型:LINE_8(八邻接),LINE_4(四邻接),LINE_AA(抗锯齿)

//画矩阵
rectangle(baImage,rect,color,2,LINE_8);
//背景图片,矩阵,颜色向量,线条粗细,线条类型

//画椭圆
eclipse(bgImage,Point(bgImage.cols/2,bgImage.rows/2),Size(bgImage.cols/4,bgImage.rows/8),90,0,360,color,2,LINE_8 )
//背景图片,圆心,长短半径,开始画的角度,终止的角度,颜色向量,粗细,线条类型

//画圆
Point center = Point(bgImage.cols,bgImage.rows);
circle(bgImage,center,150,color,2,8);
//背景图片,圆心,半径, 颜色向量, 线条类型

//创建一系列点
Point pts[1][5];
pts[0][0] = Point(10,10);
pts[0][1] = Point(10,100);
pts[0][2] = Point(100,100);
pts[0][3] = Point(100,10);
pts[0][4] = Point(10,10);

const Point* ppts[] = { pts[0] };
int npt[] = { 5 };
Scalar color = Scalar(255,12,255);

fillPoly(bgImage,ppts,npt,1,color,8);
//根据点来填充其围成的图形

putText(bgImage,"Hello OpenCV!",Point(300,300),CV_FONT_HERSHEY_COMPLEX,2.0,Scalar(12,255,200),1,8);
//背景图片,文字,左上角点,字符,大小,颜色向量,粗细,线条类型

4隣接、8隣接、アンチエイリアシング

アンチエイリアシング:線を引いた後、ガウスフィルタリングを使用してエイリアシングを削除します。

コードの練習

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

void MyLines();
void MyRectangle();
void MyEllipse();
void MyCircle();
void MyPolygon();

Mat src;
int main(int argc, char* argv[])
{

	src = imread("src.jpg");
	if (src.empty())
	{
		cout << "could not open image ..." << endl;
		return -1;
	}
	MyLines();
	MyRectangle();
	MyEllipse();
	MyCircle();
	MyPolygon();

	imshow("test", src);
	waitKey(0);

	return 0;
}

void MyLines()
{
	Point p1 = Point(50, 50);
	Point p2; p2.x = 300; p2.y = 300;
	Scalar colors = Scalar(0, 0, 255);
	line(src, p1, p2, colors, 2, LINE_8);
}

void MyRectangle()
{
	Rect rec = Rect(100, 100, 300, 300);
	Scalar colors = Scalar(0, 0, 255);
	rectangle(src, rec, colors, 4, LINE_4);
}


void MyEllipse()
{
	Point center = Point(src.cols / 2,src.rows / 2);
	Scalar colors = Scalar(0, 125, 255);
	ellipse(src, center, Size(src.cols / 3, src.rows / 3), 45, 0, 270, colors, 3, LINE_AA);
}

void MyCircle()
{
	Point center = Point(src.cols / 2,src.rows / 2);
	Scalar colors = Scalar(125, 125, 155);
	circle(src, center, 100, 2, 8);
}

void MyPolygon()
{
	Point pts[1][5];
	pts[0][0] = Point(10, 10);
	pts[0][1] = Point(10, 100);
	pts[0][2] = Point(100, 100);
	pts[0][3] = Point(100, 10);
	pts[0][4] = Point(10, 10);

	const Point* ppts[] = { pts[0] };
	int npt[] = { 5 };
	Scalar color = Scalar(255, 12, 255);

	fillPoly(src, ppts, npt, 1, color, 8);
}

 

 

おすすめ

転載: blog.csdn.net/fan1102958151/article/details/106979148