API简介
//基础数据结构
//点
Point p1=Point(100,100)
Point p2; p2.x = 200; p2.y = 300;
//矩阵
Rect rect = Rect(200,100,300,300);
//起点x,y,长300,宽300
//颜色向量
Scalar color = Scalar(0,0,255);
//画线
line(bgImage,p1,p2,color,1,LINE_8);
//背景图片,起点,终点,颜色向量,线条粗细,线条类型
//线条类型:LINE_8(八邻接),LINE_4(四邻接),LINE_AA(抗锯齿)
//画矩阵
rectangle(baImage,rect,color,2,LINE_8);
//背景图片,矩阵,颜色向量,线条粗细,线条类型
//画椭圆
eclipse(bgImage,Point(bgImage.cols/2,bgImage.rows/2),Size(bgImage.cols/4,bgImage.rows/8),90,0,360,color,2,LINE_8 )
//背景图片,圆心,长短半径,开始画的角度,终止的角度,颜色向量,粗细,线条类型
//画圆
Point center = Point(bgImage.cols,bgImage.rows);
circle(bgImage,center,150,color,2,8);
//背景图片,圆心,半径, 颜色向量, 线条类型
//创建一系列点
Point pts[1][5];
pts[0][0] = Point(10,10);
pts[0][1] = Point(10,100);
pts[0][2] = Point(100,100);
pts[0][3] = Point(100,10);
pts[0][4] = Point(10,10);
const Point* ppts[] = { pts[0] };
int npt[] = { 5 };
Scalar color = Scalar(255,12,255);
fillPoly(bgImage,ppts,npt,1,color,8);
//根据点来填充其围成的图形
putText(bgImage,"Hello OpenCV!",Point(300,300),CV_FONT_HERSHEY_COMPLEX,2.0,Scalar(12,255,200),1,8);
//背景图片,文字,左上角点,字符,大小,颜色向量,粗细,线条类型
四邻接、八邻接和抗锯齿
抗锯齿:在绘制完线之后,使用高斯滤波来去除锯齿。
代码实践
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void MyLines();
void MyRectangle();
void MyEllipse();
void MyCircle();
void MyPolygon();
Mat src;
int main(int argc, char* argv[])
{
src = imread("src.jpg");
if (src.empty())
{
cout << "could not open image ..." << endl;
return -1;
}
MyLines();
MyRectangle();
MyEllipse();
MyCircle();
MyPolygon();
imshow("test", src);
waitKey(0);
return 0;
}
void MyLines()
{
Point p1 = Point(50, 50);
Point p2; p2.x = 300; p2.y = 300;
Scalar colors = Scalar(0, 0, 255);
line(src, p1, p2, colors, 2, LINE_8);
}
void MyRectangle()
{
Rect rec = Rect(100, 100, 300, 300);
Scalar colors = Scalar(0, 0, 255);
rectangle(src, rec, colors, 4, LINE_4);
}
void MyEllipse()
{
Point center = Point(src.cols / 2,src.rows / 2);
Scalar colors = Scalar(0, 125, 255);
ellipse(src, center, Size(src.cols / 3, src.rows / 3), 45, 0, 270, colors, 3, LINE_AA);
}
void MyCircle()
{
Point center = Point(src.cols / 2,src.rows / 2);
Scalar colors = Scalar(125, 125, 155);
circle(src, center, 100, 2, 8);
}
void MyPolygon()
{
Point pts[1][5];
pts[0][0] = Point(10, 10);
pts[0][1] = Point(10, 100);
pts[0][2] = Point(100, 100);
pts[0][3] = Point(100, 10);
pts[0][4] = Point(10, 10);
const Point* ppts[] = { pts[0] };
int npt[] = { 5 };
Scalar color = Scalar(255, 12, 255);
fillPoly(src, ppts, npt, 1, color, 8);
}