OpenCV 之 基本绘图
OpenCV 虽是开源的计算机视觉库,但里面也有一些基础的绘图函数,本文将介绍几种常用绘图函数:直线、圆、椭圆、长方形、多边形等。
1 数据结构
1.1 二维向量
cv::Point 代表的是二维点 (int 型),可用来表示图像坐标 (x, y)
// one way
Point pt;
pt.x = ;
pt.y = ; // another way
Point pt = Point(, );
OpenCV 中,二维点类型可分为 Point2i, Point2l, Point2f, Point2d 四种,各自定义如下:
// 4 type of Point
typedef Point_<int> cv::Point2i
typedef Point_<int64> cv::Point2l
typedef Point_<float> cv::Point2f
typedef Point_<double> cv::Point2d // cv::Point
typedef Point2i cv::Point
1.2 四维向量
cv::Scalar 代表的是四维向量,常用来传递像素值,尤其是 BGR 通道的像素值 (最后一个元素不用,则不定义)
$\texttt{Scalar} (blue \_ component, green \_ component, red \_ component)$
2 绘图函数
2.1 line()
OpenCV 中,绘制直线段较简单,就是过两点画一条直线,函数为 line()
// pt1, first point
// pt2, second point
void cv::line ( InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = , int lineType = LINE_8, int shift = )
2.2 circle() 和 ellipse()
知道圆心和半径,就可以绘制圆了,函数为 circle()
void cv::circle (
InputOutputArray img,
Point center, // center of the circle
int radius, // radius of the circle
const Scalar & color,
int thickness = ,
int lineType = LINE_8,
int shift =
)
椭圆稍微复杂,椭圆中心,长、短轴半径,以及椭圆弧的旋转角度,则可得到一段椭圆弧 ellipse()
void cv::ellipse (
InputOutputArray img,
Point center, // center of the ellipse
Size axes, // half size of the main axes
double angle, // ellipse rotation angle in degrees
double startAngle,
double endAngle,
const Scalar & color,
int thickness = ,
int lineType = LINE_8,
int shift =
)
2.3 rectangle()
长方形的绘制,主要是靠其对角线上的两个点 pt1 和 pt2,函数为 rectangle()
void cv::rectangle (
InputOutputArray img,
Point pt1, // vertex of the rectangle
Point pt2, // vertex of the rectangle opposite to pt1
const Scalar & color,
int thickness = ,
int lineType = LINE_8,
int shift =
)
2.4 fillpoly()
void cv::fillPoly (
InputOutputArray img,
const Point ** pts, //
const int * npts, //
int ncontours,
const Scalar & color,
int lineType = LINE_8,
int shift = ,
Point offset = Point()
)
3 代码示例
3.1 直线和长方形
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp> using namespace cv; #define w 300 int main()
{
// creat a white background image
Mat img;
img.create(w,w,CV_8UC3);
img.setTo(Scalar(,,)); // draw lines
line(img, Point(w/,w/), Point(*w/, w/), Scalar(, , ));
line(img, Point(w/,w/), Point(*w/, w/), Scalar(, , ));
line(img, Point(w/,*w/), Point(*w/, *w/), Scalar(, , )); // draw rectangle
rectangle(img,Point(w/,w/),Point(*w/,*w/),Scalar(,,)); // show lines in the image
imshow("line and rectangle", img); waitKey();
}
3.2 圆和椭圆
// draw circle and ellipse
circle(img, Point(w/,w/), , Scalar(, , ));
ellipse(img, Point(w/,w/), Size(,), , , , Scalar(, , ));
3.3 多边形
Point rook_points[][];
rook_points[][] = Point( w/, *w/ );
rook_points[][] = Point( *w/, *w/ );
rook_points[][] = Point( *w/, *w/ );
rook_points[][] = Point( *w/, *w/ );
rook_points[][] = Point( *w/, *w/ );
rook_points[][] = Point( *w/, *w/ );
rook_points[][] = Point( *w/, w/ );
rook_points[][] = Point( *w/, w/ );
rook_points[][] = Point( *w/, w/ );
rook_points[][] = Point( *w/, w/ );
rook_points[][] = Point( *w/, w/ );
rook_points[][] = Point( *w/, w/ );
rook_points[][] = Point( *w/, w/ );
rook_points[][] = Point( *w/, w/ );
rook_points[][] = Point( *w/, w/ );
rook_points[][] = Point( w/, w/ );
rook_points[][] = Point( w/, *w/ );
rook_points[][] = Point( *w/, *w/ );
rook_points[][] = Point( *w/, *w/ );
rook_points[][] = Point( w/, *w/ );
const Point* ppt[] = { rook_points[]};
int npt[] = { };
// draw polygon
fillPoly(img, ppt, npt, , Scalar(, , ));
3.4 显示效果

参考资料:
OpenCV Tutorials / imgproc module / Basic Drawing
OpenCV 之 基本绘图的更多相关文章
- OpenCV中的绘图函数-OpenCV步步精深
OpenCV 中的绘图函数 画线 首先要为画的线创造出环境,就要生成一个空的黑底图像 img=np.zeros((512,512,3), np.uint8) 这是黑色的底,我们的画布,我把窗口名叫做i ...
- python之OpenCv(三)---基本绘图
opencv 提供了绘制直线.圆形.矩形等基本绘图的功能 1.绘直线 cv2.line(画布,起点坐标,终点坐标,颜色,宽度) 例如: cv2.line(image,(20,60),(300,400) ...
- 5、opencv中的绘图函数
1.目标 a.学习使用 OpenCV 绘制不同几何图形 b. 你将会学习到这些函数: cv2.line(), cv2.circle(), cv2.rectangle(),cv2.ellipse(),c ...
- OpenCV中的绘图函数
OpenCV可以用来绘制不同的集合图形,包括直线,矩形,圆,椭圆,多边形以及在图片上添加文字.用到的绘图函数包括 cv2.line(),cv2.circle(),cv2.rectangle() ,cv ...
- opencv学习(三)——绘图功能
绘图功能 我们将学习以下函数:cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等. 在这些功能中,有一些相同的参数: img ...
- OpenCV绘图
OpenCV绘图 rectangle(Mat& img,Point pt1, Point pt2, const Scalar&color, int thickness=1,int li ...
- OpenCV绘图函数
OpenCV几个绘图函数 矩形 rectangle(Mat& img,Point pt1, Point pt2, const Scalar&color, int thickness=1 ...
- OpenCV之响应鼠标(四):在图像上绘制出矩形并标出起点的坐标
涉及到两方面的内容:1. 用鼠标画出矩形.2.在图像上绘制出点的坐标 用鼠标绘制矩形,涉及到鼠标的操作,opencv中有鼠标事件的介绍.需要用到两个函数:回调函数CvMouseCallback和注册回 ...
- OpenCV中cv2的用法
一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数 ...
随机推荐
- SqlBulkCopy批量插入数据 显示 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 smalldatetime。错误
因为需要大量插入数据,linq ef无法达到速度的要求,因此把模型转换成SQL ,使用SqlBulkCopy快速插入.但是去提示 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 s ...
- 滑动窗口-Moving Stones Until Consecutive II
2020-02-20 16:34:16 问题描述: 问题求解: public int[] numMovesStonesII(int[] stones) { int n = stones.length; ...
- 贪心-Course Schedule III
2020-02-01 21:37:39 问题描述: 问题求解: 对于课程来说截止时间在前面的肯定需要优先安排,所以首先需要将courses按照deadline进行排序. 然后只需要不断的加入当前的课程 ...
- ysoserial分析【二】7u21和URLDNS
目录 7u21 gadget链分析 hashCode绕过 参考 URLDNS 7u21 7u21中利用了TemplatesImpl来执行命令,结合动态代理.AnnotationInvocationHa ...
- [dp+博弈]棋盘的必胜策略
链接:https://ac.nowcoder.com/acm/problem/21797来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...
- c++中的多态机制
目录 1 背景介绍 2 多态介绍 2-1 什么是多态 2-2 多态的分类 2-3 动态多态成立的条件 2-4 静态联编和动态联编 2-5 动态多态的实现原理 2-6 虚析构函数 ...
- 理解MapReduce计算构架
用Python编写WordCount程序任务 程序 WordCount 输入 一个包含大量单词的文本文件 输出 文件中每个单词及其出现次数(频数),并按照单词字母顺序排序,每个单词和其频数占一行,单词 ...
- 白嫖Office365
写作不易,资瓷一下呗!个人博客:https://raycoder.me 最近系统升级到1909, 送了我一套Office365. 我也很无奈啊, 送了让我激活也是够了... 用了各种激活软件都无效,比 ...
- 瀑布流vue-waterfall的高度设置
最近用vue做项目,用到了瀑布流vue-waterfall,其中遇到高度的设置问题,大概介绍下,希望可以帮到一些人 1.安装 npm install --save vue-waterfall 2.引入 ...
- VMware pro 15.5安装教程
一,安装 1.VMware pro 15.5 下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evalu ...