与OpenCV的第五天

第一件事: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;
}
ellipse 函数示例程序运行效果图

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();
}
circle 函数示例程序运行效果图

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();
}
polygon 函数示例程序运行效果图

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();
}
line 函数示例程序运行效果图

推荐阅读更多精彩内容