opencv学习笔记(八)--在图像上绘制形状和文字

更新时间:2023-07-08 10:52:02 阅读: 评论:0

opencv学习笔记(⼋)--在图像上绘制形状和⽂字
⽂章⽬录
CV::Point以及CV::Scalar
Point表⽰的是2D平⾯上的⼀个点(x, y),使⽤⽅式如下:
第⼀种
Point p1;
p1.x =100;
p1.y =50;
p1表⽰的就是坐标为(100,50)的点。
第⼆种
Point p2 =Point(100,80);
p2表⽰的是坐标为(100,80)的点。同样 Point(100,80)也可直接表⽰坐标为(100,80)的点。
Scalar表⽰的是⼀个四个元素的向量,使⽤⽅式为:Scalar(b, g, r);
b表⽰的是blue;
g表⽰的是green;
r表⽰的是red。
可以⽤来表⽰图像对应个数通道对应的值。
Scalar()参数的个数可以是⼀个、两个、三个或四个(图像⼏个通道就有⼏个参数)。
画直线cv::line()
void Mylines(int x,int y)
英文dtad什么意思{
Point p1 =Point(20,20);//直线起点
Point p2;//直线终点
p2.x = x;
p2.y = y;
Scalar color =Scalar(255,0,0);//直线颜⾊为蓝⾊
line(bgImage, p1, p2, color,1, LINE_AA);//在图像bgImage上画⼀条从p1到p2,颜⾊为color,粗细为1的反锯齿类型直线
}
Line(CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1,int line_type=8,int shift=0)
第⼀个参数img表⽰需要画线的图⽚
第⼆个参数pt1表⽰的是直线起点坐标
第三个参数pt2表⽰的是直线终点坐标
第四个参数color表⽰的是直线的颜⾊,⽤Scalar来表⽰颜⾊值
第五个参数thickness表⽰线条粗细
第六个参数line_type表⽰直线类型,有LINE_4、LINE_8、LINE_AA
LINE_4是4联通直线
LINE_8是8联通直线
LINE_AA是反锯齿直线
如果对直线没有要求 ,⼀般使⽤LINE_8,其算法最简单,所⽤时间最少,如果想要直线更清晰漂亮,可以使⽤反锯齿LINE_AA,但是其相应的运算时间也最长。
画椭圆cv::elip()
Scalar color =Scalar(0,255,0);
ellip(bgImage,ls /2, ws /2),ls /4, ws /8),90,0,120, color,2, LINE_8); }
免费英语在线翻译
ellip(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)
img:要在上⾯画椭圆的图像
留学前培训center:椭圆的中⼼——Point类型
axes:椭圆的轴长,格式为 Size (长轴长度的⼀半, 短轴长度的⼀半)
angle:椭圆沿⽔平⽅向逆时针旋转的⾓度
startAngle:沿长轴顺时针⽅向开始显⽰的⾓度
endAngle:沿长轴顺时针结束显⽰的⾓度
color:表⽰的是线条的颜⾊
thickness:椭圆边框的粗细,cv.FILLED 表⽰绘制实⼼椭圆
lineType:椭圆边框的类型
shift:坐标精确到⼩数点后第⼏位,默认为0
画矩形cv::rectangle()
void MyRectangle()
{
Rect rect =Rect(20,20,50,50);
Scalar color =Scalar(255,20,50);
rectangle(bgImage, rect, color,2, LINE_8);
}
void rectangle(Mat& img, Point pt1,Point pt2,const Scalar& color,int thickness=1,int lineType=8,int shift=0)
和直线类似,这⾥的pt1和pt2分别表⽰的是矩形左上⾓坐标和右下脚坐标。
画圆cv::circle()
void MyCircle()
{
Scalar color =Scalar(100,200,50);
Point center =ls /2, ws /2);
circle(bgImage,center,100, color,2, LINE_8);
}
circle(img, center, radius, color, thickness, lineType, shift);
img:要在上⾯画圆的图像
center:圆的圆⼼
radius:圆的半径
color:圆的颜⾊
thickness:圆边框的粗细,cv.FILLED 表⽰绘制实⼼圆
lineType:圆边框的类型
shift:坐标精确到⼩数点后⼏位,默认为0
画填充多边形cv::fillpoly()
Point pts[1][5];
pts[0][0]=Point(100,100);
好好学习天天向上用英语怎么说
pts[0][1]=Point(100,200);
pts[0][2]=Point(200,200);
pts[0][3]=Point(200,100);
pts[0][4]=Point(100,100);
const Point* ppts[]={ pts[0]};
int npt[]={5};
Scalar color =Scalar(255,255,0);
fillPoly(bgImage, ppts, npt,1, color, LINE_8);
}
绘制多边形的函数中需要⽤到⼀个⼆维数组,这个⼆维数组中每⼀⾏存储的是⼀个多边形的所有顶点,⼀个⼆维数组中可以存储多个多边形的顶点。
在使⽤的时候需要创建⼀个指针数组,数组中每⼀个指针指向存储多边形顶点的⼆维数组中的⼀⾏。
fillPoly(Mat& img,const Point** ppts,const int* npts,int ncontours,const Scalar& color,int lineType=8);
img是要在上⾯画图的图像
ppts是⼀个指向多边形数组的指针,必须⽤const来修饰,上⾯的程序中pts是⼀个⼆维数组,ppts是指向这个数组的指针
npts是多边形顶点个数的数组名
ncontours是绘制多边形的个数
color是填充的颜⾊
如果想要绘制多个多边形,可以这样:
void MyPlygon()
{
Point pts[2][5];
pts[0][0]=Point(100,100);
pts[0][1]=Point(100,200);
pts[0][2]=Point(200,200);
pts[0][3]=Point(200,100);
pts[0][4]=Point(100,100);
pts[1][0]=Point(200,200);
pts[1][1]=Point(200,300);
pts[1][2]=Point(300,300);
pts[1][3]=Point(200,200);
const Point* ppts[]={ pts[0], pts[1]};
int npt[]={5,4};
Scalar color =Scalar(0,255,255);
fillPoly(bgImage, ppts, npt,2, color, LINE_8);//ppts包含两个存储多边形坐标的数组,npt对应存储两个对应多边形的顶点个数,2表⽰绘制两个多边形
btest}
绘制⽂字cv::putText()
putText(bgImage,"Hello openCV",Point(50,100), CV_FONT_HERSHEY_COMPLEX,0.7,Scalar(12,255,80),1,8);
cv::Mat& img,// 待绘制的图像
const string& text,// 待绘制的⽂字
cv::Point origin,// ⽂本框的左下⾓
int fontFace,// 字体 (如cv::FONT_HERSHEY_PLAIN)
double fontScale,// 尺⼨因⼦,值越⼤⽂字越⼤
cv::Scalar color,// 线条的颜⾊(RGB)
int thickness =1,// 线条宽度
int lineType =8,// 线型(4邻域或8邻域,默认8邻域)
bool bottomLeftOrigin =fal// true='origin at lower left'
);
具体的详细解释可以看
完整程序和运⾏结果
/
/ Project9.cpp : 此⽂件包含 "main" 函数。程序执⾏将在此处开始并结束。
//
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
Mat bgImage;
const char* drawdemo_win ="draw shape and text demo";
void Mylines(int x,int y)
{
Point p1 =Point(20,20);
Point p2;
p2.x = x;
p2.y = y;
Scalar color =Scalar(255,0,0);
raisinline(bgImage, p1, p2, color,1, LINE_AA);
}
void MyRectangle()
{
Rect rect =Rect(20,20,50,50);
Scalar color =Scalar(0,0,255);
rectangle(bgImage, rect, color,2, LINE_8);
}
void MyElipes()
{
Scalar color =Scalar(0,255,0);
ellip(bgImage,ls /2, ws /2),ls /4, ws /8),90,0,270, color,2, LINE_8); }
tftpvoid MyCircle()
堕落天使英文{
Scalar color =Scalar(255,255,0);词海在线翻译
Point center =ls /2, ws /2);
circle(bgImage,center,100, color,2, LINE_8);
}
void MyPlygon()
{
Point pts[1][5];
pts[0][0]=Point(100,100);
pts[0][1]=Point(100,200);
pts[0][2]=Point(200,200);
pts[0][3]=Point(200,100);
pts[0][3]=Point(200,100);
pts[0][4]=Point(100,100);
const Point* ppts[]={ pts[0]};
int npt[]={5};
Scalar color =Scalar(0,255,255);
fillPoly(bgImage, ppts, npt,1, color, LINE_8);
}
int main()厘米的英文
{
std::cout <<"Hello World!\n";
bgImage =imread("A:/opencvproject/002.jpg");
if(!bgImage.data)
{
cout <<"image is empty"<< endl;
return-1;
}
ws, ls);
MyRectangle();
MyElipes();
MyCircle();
MyPlygon();
putText(bgImage,"Hello openCV",Point(50,100), CV_FONT_HERSHEY_COMPLEX,0.7,Scalar(12,255,80),1,8); namedWindow(drawdemo_win, CV_WINDOW_AUTOSIZE);
imshow(drawdemo_win, bgImage);
waitKey(0);
return0;
}

本文发布于:2023-07-08 10:52:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/170933.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:c#画圆形控件
标签:多边形   直线   坐标   对应
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图