opencv学习笔记七:绘图和注释

艺术线条和填充多边形

画直线或者其他图形(虚线,圆,矩形等)的函数都接受宽度(thickenss)和线性(lineType)的参数,这两个都是整型的,但第二个参数的值只能是4,8或者cv::LINE__AA。thickness参数是指线宽的像素数,对于圆,矩形,和其他封闭图形,thickenss可以设置为cv::FULLD,这个图形就会被用和边界一样的颜色填充满。
lineType参数表示直线是“四邻域连接”还是“八邻域连接”或者是平滑处理。

  1. cv::circle();画一个简单的圆
  2. cv::clipLine();判断一条直线是否在邻域内
  3. cv::ellipse();画一个椭圆(可以倾斜,或者只有部分圆弧)
  4. cv::ellipse2Poly();计算一个近似椭圆的多边形
  5. cv::fillConvexPoly();画一个填充的简单多边形
  6. cv::fillPoly();画一个填充的任意多边形
  7. cv::line();画一个简单直线
  8. cv::rectangle();画一个简单矩形
  9. cv::polyLines();画多重折线

cv::circle()画圆函数

	circle(
		cv::Mat&	img,  //输入图像
		cv::Point   center, //输入圆心
		int			radius,  //半径
		const cv::Scalar& color, //线条颜色
		int			thickness = 1,  //线宽
		int			lineType = 8,   //线型
		int			shift = 0    //圆心坐标点和半径值的小数位数
	);

下面代码在一幅我们定义的图片上绘制了一个圆;

#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

#define WINDOW_NAME  "绘图"
#define WINDOW_WIDTH  300  //定义图像大小的宏

int main()
{
	Mat img = Mat::zeros(WINDOW_WIDTH, WINDOW_WIDTH,CV_8UC3);
	Point2i pt(100,100);
	circle(img,pt , 50, Scalar(255, 0, 0));
	
	imshow("WINDOW_NAME", img);
	waitKey();
	return 0;
}

在这里插入图片描述

cv::ellipse()画椭圆函数

在这里插入图片描述

cv::line()画直线

该函数在图像img上绘制一条从pt1到pt2的直线,直线自动被图像边缘截断;

	line(
		cv::Mat  img,   //输入图像
		cv::Point  pt1,  //起点
		cv::Point  pt2,   //终点
		const cv::Scalar&  color,  //颜色
		int    lineType = 8,   //线型
		int    shift = 0   //起点终点的小数位数
	);

cv::rectangle()

该函数有两种使用方法,一种传入矩形的两个相对的角点坐标,另一种是传入一个矩形Rect类;

	rectangle(
		cv::Mat   img,
		cv::Point  pt1,
		cv::Point  pt2,
		const cv::Scalar&  color,
		int       lineType = 8,
		int		  shift = 0
	);
	rectangle(
		cv::Mat   img,
		cv::Rect  r,
		const cv::Scalar&  color,
		int       lineType = 8,
		int		  shift = 0
	);

下面我们在之前画圆的函数里再加点东西:

	Point2i pt1(50, 50);   //矩形角点1
	Point2i pt2(100, 100);  //矩形角点2
	Rect r(10, 10, 70, 70);  //定义一个矩形
	
	rectangle(img, pt1, pt2, Scalar(0, 0, 255));
	rectangle(img, r, Scalar(0, 255, 0));

在这里插入图片描述

字体和文字

我们很自然的有另外一种需求,我们可以在图片上绘制矩形,那我们也想可以给图片加一些类似字幕的文字。这就是cv::putText()函数

putText(img, "zhouxuan", pt1, FONT_HERSHEY_SIMPLEX,1.0,Scalar(255,255,0));
	    //  输入图像        左下标     字形            大小   颜色
	   字形标识符:
FONT_HERSHEY_COMPLEX_SMALL;  //小号版本的FONT_HERSHEY_COMPLEX
FONT_HERSHEY_SIMPLEX;        //手写体
FONT_HERSHEY_DUPLEX;         //普通大小无衬线字体,比 FONT_HERSHEY_SCRIPT_SIMPLEX 更复杂
FONT_HERSHEY_COMPLEX;        //普通大小无衬线字体,比FONT_HERSHEY_DUPLEX 更复杂
FONT_HERSHEY_TRIPLEX;        //普通大小无衬线字体,比FONT_HERSHEY_SCRIPT_COMPLEX 更复杂
FONT_HERSHEY_SCRIPT_COMPLEX; //比FONT_HERSHEY_SCRIPT_SIMPLEX更复杂的变体
FONT_HERSHEY_PLAIN;          //小号无衬线字体
FONT_HERSHEY_SCRIPT_SIMPLEX;  //普通大小无衬线字体

在这里插入图片描述

发布了26 篇原创文章 · 获赞 40 · 访问量 3650

猜你喜欢

转载自blog.csdn.net/qq_43667130/article/details/102976886
今日推荐