第一件事:OpenCV 基本图形绘制
1. ellipse 函数(绘制椭圆)
函数原型:
void ellipse(InputOutputArray img, Point center, Size axes,
double angle, double startAngle, double endAngle,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
参数 | 解释 |
---|---|
InputOutPutArray img | 在 img 图像上绘制 |
Point center | 椭圆中心 |
Size axes | axes 大小的矩形内切 |
double angle | 旋转角度 |
double startAngle | 开始绘制的角度 |
double endAngle | 结束绘制的角度 |
Scalar& color | 颜色 |
int thickness | 线条厚度 |
lineType | 线条边缘类型(LINE_4(边缘像素采用4连通,即上下左右),LINE_8(边缘像素采用8连通,即上下左右还有四个对角),LINE_AA(边缘像素采用高斯滤波,抗锯齿)) |
shift | 坐标点的小数点位数 |
示例程序
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {
cv::Mat img = cv::imread("1.jpg");
int thickness = 2;
cv::ellipse(img, cv::Point(img.cols/2, img.rows/2), cv::Size(img.cols/4, img.rows/8), 0.0, 0.0, 360.0, cv::Scalar(255,129,0),thickness,cv::LINE_AA);
cv::imshow("img", img);
cv::waitKey();
return 0;
}
2. circle 函数(绘制实心圆)
函数原型:
void circle(InputOutputArray img, Point center, int radius,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
参数 | 解释 |
---|---|
InputOutPutArray img | 在 img 图像上绘制 |
Point center | 圆心 |
int radius | 半径 |
Scalar& color | 颜色 |
int thickness | 线条厚度 |
lineType | 线条边缘类型(LINE_4(边缘像素采用4连通,即上下左右),LINE_8(边缘像素采用8连通,即上下左右还有四个对角),LINE_AA(边缘像素采用高斯滤波,抗锯齿)) |
shift | 坐标点的小数点位数 |
示例程序
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {
cv::Mat img = cv::imread("1.jpg");
int thickness = 1;
cv::circle(img, cv::Point(img.cols/2,img.rows/2), 100, cv::Scalar(255,0,0),thickness,cv::LINE_AA);
cv::imshow("img", img);
cv::waitKey();
}
3. polygon 函数(绘制多边形)
函数原型:
void fillPoly(Mat& img, const Point** pts,
const int* npts, int ncontours,
const Scalar& color, int lineType = LINE_8, int shift = 0,
Point offset = Point() );
参数 | 解释 |
---|---|
InputOutPutArray img | 在 img 图像上绘制 |
Point**pts | 二维顶点数组(每一个一维数组代表一个多边形顶点集) |
int* npts | 每个多边形的顶点数 |
int ncontours | 多边形数量 |
Scalar& color | 颜色 |
lineType | 线条边缘类型(LINE_4(边缘像素采用4连通,即上下左右),LINE_8(边缘像素采用8连通,即上下左右还有四个对角),LINE_AA(边缘像素采用高斯滤波,抗锯齿)) |
shift | 坐标点的小数点位数 |
offset | 多边形偏移量 |
示例程序
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {
cv::Mat img = cv::imread("1.jpg");
cv::Point rookPoints[] = {cv::Point(img.cols/4,img.rows*3/4),cv::Point(img.cols/4,img.rows/4),cv::Point(img.cols*3/4,img.rows*3/4)};
const cv::Point* points[1] = {rookPoints};
int npts[1] = {3};
cv::fillPoly(img, points, npts, 1, cv::Scalar(255,0,0),cv::LINE_AA);
cv::imshow("img", img);
cv::waitKey();
}
4. line 函数(绘制线)
函数原型:
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
int thickness = 1, int lineType = LINE_8, int shift = 0);
参数 | 解释 |
---|---|
InputOutPutArray img | 在 img 图像上绘制 |
Point pt1 | 端点1 |
Point pt2 | 端点2 |
Scalar& color | 颜色 |
int thickness | 线条厚度 |
lineType | 线条边缘类型(LINE_4(边缘像素采用4连通,即上下左右),LINE_8(边缘像素采用8连通,即上下左右还有四个对角),LINE_AA(边缘像素采用高斯滤波,抗锯齿)) |
shift | 坐标点的小数点位数 |
示例程序:
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {
cv::Mat img = cv::imread("1.jpg");
int thickness = 5;
cv::line(img, cv::Point(img.cols/8,img.rows/2), cv::Point(img.cols*7/8,img.rows/4), cv::Scalar(255,0,0),thickness,cv::LINE_AA);
cv::imshow("img", img);
cv::waitKey();
}