博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opencv学习笔记七:绘图和注释
阅读量:3949 次
发布时间:2019-05-24

本文共 2467 字,大约阅读时间需要 8 分钟。

艺术线条和填充多边形

画直线或者其他图形(虚线,圆,矩形等)的函数都接受宽度(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 
#include
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_COMPLEXFONT_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;  //普通大小无衬线字体

在这里插入图片描述

转载地址:http://edewi.baihongyu.com/

你可能感兴趣的文章
移动行业术语资料
查看>>
3G到来将全面颠覆SP、CP游戏规则
查看>>
射击游戏中跟踪弹及小角度移动的开发
查看>>
播放声音文件的完整源代码
查看>>
J2ME编程最佳实践之灵活的RMS应用
查看>>
MOBILE FIRST: HOW TO APPROACH MOBILE WEBSITE TESTING? 移动优先:如何处理移动网站测试?
查看>>
开始使用Retrofit 2 HTTP 客户端
查看>>
对于初学者练习的6个开源项目
查看>>
保持冷静和需要打破的东西:软件测试初学者
查看>>
如何通过连接您的业务应用程序来节省时间
查看>>
熟悉现代JavaScript的培训计划
查看>>
7本书从小工到数据分析专家
查看>>
程序设计的基本原则:栈和堆
查看>>
Android应用程序架构
查看>>
Android:绘制自定义视图
查看>>
Android开发:一些有用的库(第一部分)
查看>>
Android 默认暗码
查看>>
Android 系列 1.3了解Android版本
查看>>
Android 系列 6.28使用正确的复数格式化
查看>>
Android 系列 6.29创建在两个活动之间显示的加载屏幕
查看>>