1、画线
line()
void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 );
第一个参数img:要划的线所在的图像;
第二个参数pt1:直线起点
第二个参数pt2:直线终点
第三个参数color:直线的颜色 e.g:Scalor(0,0,255)
第四个参数thickness=1:线条粗细
第五个参数线条类型。CV_AA - antialiased 线条。
第六个参数:坐标点的小数点位数。
例:
Point p1 = Point(20,30);
point p2;
p2.x = 300;
p2.y = 300;
Scalar color = Scalar(0,255,255);
line(bgImage,p1,p2,color,1,Line_AA);//Line_AA为反锯齿
2、画椭圆
ellipse()
void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,
int thickness=1, int line_type=8, int shift=0 );
(1)img图像。
(2)center圆心坐标。
(3)radius 圆形的半径。
(4)color线条的颜色。
(5)thickness如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充。
(6)line_type线条的类型。见 cvLine 的描述
(7)shift圆心坐标点和半径值的小数点位数。
Scalar color = Scalar(0,255,255);
ellipse(bgImage,Point(bgImage.cols/2,bgImage.rows/2),Size(bgImage.cols/4,bgImage.rows/8),90,0,360,color,2,Line_8);
3、画矩形
rectangle()
通过传入矩形画矩形:
void rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0 )
Rect rect = Rect(200,100,300,300);
Scalar color = Scalar(255,0,0);
rectangle(bgImage,rect,color,2,Line_8);
4、画圆
circle()
cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int lineType=8, int shift=0)
Scalar color = Scalar(0,255,255);
circle(bgImage,Point(bgImage.rpws/2,bgImage.cols/2),150,color,1,Line_AA);
5、画填充
fillPoly()
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("02.jpg");
Point root_points[1][6];
root_points[0][0] = Point(215, 220);
root_points[0][1] = Point(460, 225);
root_points[0][2] = Point(466, 450);
root_points[0][3] = Point(235, 465);
root_points[0][4] = Point(260, 390);
root_points[0][5] = Point(96, 310);
const Point* ppt[1] = { root_points[0] };
int npt[] = { 6 };
polylines(src, ppt, npt, 1, 1, Scalar(0,0,0), 1, 8, 0);
imshow("Test", src);
cv::Mat mask_ann, dst;
src.copyTo(mask_ann);
mask_ann.setTo(cv::Scalar::all(0));
fillPoly(mask_ann, ppt, npt, 1, Scalar(255, 255, 255));
imshow("mask_ann", mask_ann);
src.copyTo(dst, mask_ann);
imshow("dst", dst);
waitKey();
return 0;
}
6、绘制文字
void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false )
img – 显示文字所在图像.
text – 待显示的文字.
org – 文字在图像中的左下角 坐标.
font – 字体结构体.
fontFace – 字体类型, 可选择字体:
fontScale – 字体大小,该值和字体内置大小相乘得到字体大小
color – 文本颜色
thickness – 写字的线的粗细
lineType – 线型.
bottomLeftOrigin – true, 图像数据原点在左下角. Otherwise, 图像数据原点在左上角.
Mat image2;
for(int i = 0;i < 255;i += 2)
{
image2 = image - Scalar::all(i);
putText(image2,"OpenCV Forever!",org,FONT_HERSHEY_COMPLEX,
3,Scalar(i,i,255),5,lineType);
}