本文使用的环境为:Qt5.11 + OpenCV3.4.6
环境安装参考文档:https://blog.csdn.net/z634863434/article/details/89950961
函数原型:
cv::Point cv::Point(x,y)
作用:根据坐标(x,y)创建一个点
输入参数 | 参数定义 |
---|---|
x | 横坐标 |
y | 纵坐标 |
用法:
//创建(1,1)点
Point p;
p.x = 1;
p.y = 1;
//创建(1,1)点
Point p;
p = Point(1,1);
函数原型:
template cv::Scalar_< _Tp >::Scalar_ (
_Tp v0,
_Tp v1,
_Tp v2 = 0,
_Tp v3 = 0
)
作用:标记通道的值,一般与CvType一起使用,通道数和CvType指定通道数一致
输入参数 | 参数定义 |
---|---|
v0 | 蓝色通道(B) |
v1 | 绿色通道(G) |
v2 | 红色通道(R) |
v3 | 透明度通道(alpha) |
用法:
//创建一个3*3的图像,每个通道8个字节长度 uchar类型,通道数量为3的Mat对象,并将初始颜色设为(127,0,255)
Mat img= Mat(3,3,CV_8UC3,Scalar(127,0,255))
函数原型:
void cv::line ( InputOutputArray img,
Point pt1,
Point pt2,
const Scalar & color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
作用:绘制线条
输入参数 | 参数定义 |
---|---|
img | 原始图像 |
pt1 | 起始点 |
pt2 | 结束点 |
color | 线条颜色向量 |
thickness | 线条粗细 |
lineType | 线条类型 LINE_4(4链路线) \ LINE_8 (8链路线)\ LINEAA(抗锯齿线) |
shift | 点坐标中的小数位数 |
用法:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建图像500*500
Mat src = Mat::zeros(500,500,CV_8UC3);
if(src.empty()){
qDebug()<<"can not create image...\n";
return ;
}
//创建点(20,30)(300,300)
Point p1 = Point(20,30);
Point p2;
p2.x = 300;
p2.y = 300;
//设置颜色为红色
Scalar color = Scalar(0,0,255);
//画线
line(src,p1,p2,color,1,LINE_AA);
//显示图像
namedWindow("input1",WINDOW_AUTOSIZE);
imshow("input1",src);
waitKey(0);
}
函数原型1:
void cv::rectangle (InputOutputArray img,
Point pt1,
Point pt2,
const Scalar & color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
作用:绘制矩形
输入参数 | 参数定义 |
---|---|
img | 原始图像 |
pt1 | 起始点 |
pt2 | 结束点 |
color | 线条颜色向量 |
thickness | 线条粗细 |
lineType | 线条类型 LINE_4(4链路线) \ LINE_8 (8链路线)\ LINEAA(抗锯齿线) |
shift | 点坐标中的小数位数 |
用法:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建图像500*500
Mat src = Mat::zeros(500,500,CV_8UC3);
if(src.empty()){
qDebug()<<"can not create image...\n";
return ;
}
//创建点(20,30)(300,300)
Point p1 = Point(20,30);
Point p2;
p2.x = 300;
p2.y = 300;
//设置颜色为红色
Scalar color = Scalar(0,0,255);
//画线
rectangle(src,p1,p2,color,1,LINE_AA);
//显示图像
namedWindow("input1",WINDOW_AUTOSIZE);
imshow("input1",src);
waitKey(0);
函数原型2:
void cv::rectangle (Mat & img,
Rect rec,
const Scalar & color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
作用:绘制矩形
输入参数 | 参数定义 |
---|---|
img | 原始图像 |
rec | 矩形 |
color | 线条颜色向量 |
thickness | 线条粗细 |
lineType | 线条类型 LINE_4(4链路线) \ LINE_8 (8链路线)\ LINEAA(抗锯齿线) |
shift | 点坐标中的小数位数 |
用法:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建图像500*500
Mat src = Mat::zeros(500,500,CV_8UC3);
if(src.empty()){
qDebug()<<"can not create image...\n";
return ;
}
//创建矩形对象 起始点(20,30)长280 宽270
Rect rect = Rect(20,30,280,270);
//设置颜色为红色
Scalar color = Scalar(0,0,255);
//画矩阵
rectangle(src,rect,color,1,LINE_AA);
//显示图像
namedWindow("input1",WINDOW_AUTOSIZE);
imshow("input1",src);
waitKey(0);
}
函数原型:
void cv::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
)
作用:绘制椭圆(当Size两边半径相等时为圆)
输入参数 | 参数定义 |
---|---|
img | 原始图像 |
Point | 中心点 |
Size | 椭圆轴半径 |
angle | 椭圆旋转角 |
startAngle | 开始角度 |
endAngle | 结束角度 |
color | 线条颜色向量 |
thickness | 线条粗细 |
lineType | 线条类型 LINE_4(4链路线) \ LINE_8 (8链路线)\ LINEAA(抗锯齿线) |
shift | 点坐标中的小数位数 |
用法:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建图像500*500
Mat src = Mat::zeros(500,500,CV_8UC3);
if(src.empty()){
qDebug()<<"can not create image...\n";
return ;
}
Point p1(250,250);
//设置颜色为红色
Scalar color = Scalar(0,0,255);
//画椭圆
ellipse(src,p1,Size(100,200),90,0,360,color,1,LINE_AA);
//显示图像
namedWindow("input1",WINDOW_AUTOSIZE);
imshow("input1",src);
waitKey(0);
}
函数原型:
void cv::circle (InputOutputArray img,
Point center,
int radius,
const Scalar & color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
作用:绘制圆
输入参数 | 参数定义 |
---|---|
img | 原始图像 |
Point | 中心点 |
radius | 圆半径 |
color | 线条颜色向量 |
thickness | 线条粗细 |
lineType | 线条类型 LINE_4(4链路线) \ LINE_8 (8链路线)\ LINEAA(抗锯齿线) |
shift | 点坐标中的小数位数 |
用法:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建图像500*500
Mat src = Mat::zeros(500,500,CV_8UC3);
if(src.empty()){
qDebug()<<"can not create image...\n";
return ;
}
Point p1(250,250);
//设置颜色为红色
Scalar color = Scalar(0,0,255);
//画圆
circle (src,p1,100,color,1,LINE_AA);
//显示图像
namedWindow("input1",WINDOW_AUTOSIZE);
imshow("input1",src);
waitKey(0);
}
函数原型:
void cv::fillPoly( Mat & img,
const Point ** pts,
const int * npts,
int ncontours,
const Scalar & color,
int lineType = LINE_8,
int shift = 0,
Point offset = Point()
)
作用:对多边形填充颜色
输入参数 | 参数定义 |
---|---|
img | 原始图像 |
pts | 围成多边形的点 |
npts | 点的个数 |
ncontours | 轮廓数 |
color | 颜色 |
lineType | 线条类型 LINE_4(4链路线) \ LINE_8 (8链路线)\ LINEAA(抗锯齿线) |
offset | 补偿 |
用法:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建图像500*500
Mat src = Mat::zeros(500,500,CV_8UC3);
if(src.empty()){
qDebug()<<"can not create image...\n";
return ;
}
//创建围成多边形的点
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]};
//根据函数调用要求,将数量转化成指针
const int npt[] = {5};
//设置颜色为红色
Scalar color = Scalar(0,0,255);
//进行填充
fillPoly(src,ppts,npt,1,color);
//显示图像
namedWindow("input1",WINDOW_AUTOSIZE);
imshow("input1",src);
waitKey(0);
函数原型:
void cv::putText ( InputOutputArray img,
const String & text,
Point org,
int fontFace,
double fontScale,
Scalar color,
int thickness = 1,
int lineType = LINE_8,
bool bottomLeftOrigin = false
)
作用:绘制字体
输入参数 | 参数定义 |
---|---|
img | 原始图像 |
String | 需要绘制的字符串 |
org | 绘制的起点,左下角开始算 |
fontFace | 字体类型 |
fontScale | 字体缩放因数 |
color | 颜色 |
thickness | 线条粗细 |
lineType | 线条类型 LINE_4(4链路线) \ LINE_8 (8链路线)\ LINEAA(抗锯齿线) |
offset | 补偿 |
用法:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建图像500*500
Mat src = Mat::zeros(500,500,CV_8UC3);
if(src.empty()){
qDebug()<<"can not create image...\n";
return ;
}
//绘制字体
putText(src,"OpenCV",Point(100,100),CV_FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255));
//显示图像
namedWindow("input1",WINDOW_AUTOSIZE);
imshow("input1",src);
waitKey(0);
}
随机生成线条
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建图像500*500
Mat src = Mat::zeros(500,500,CV_8UC3);
if(src.empty()){
qDebug()<<"can not create image...\n";
return ;
}
//创建随机数种子
RNG rng(123456);
//创建线条的两个端点
Point pt1;
Point pt2;
while(1){
//随机生成端点位置 但必须在画布内
pt1.x = rng.uniform(0,src.cols);
pt1.y = rng.uniform(0,src.rows);
pt2.x = rng.uniform(0,src.cols);
pt2.y = rng.uniform(0,src.rows);
//随机生成颜色,0~255
Scalar color = Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));
//用户操作中断
if(waitKey(50)>0){
}
//画线
line(src,pt1,pt2,color);
imshow("input1",src);
}
}