1.绘制几何图形
OpenCV
中可以绘制的几何图形有直线、矩形、多边形、圆、椭圆。
1.1直线
void line(InputOutputArray img,
Point pt1,//直线起点
Point pt2, //直线终点
const Scalar& color,//直线颜色
int thickness = 1, //直线宽度
int lineType = LINE_8,//线型
int shift = 0);
1.2矩形
void rectangle(Mat& img,
Point pt1,//矩形左上角坐标
Pointpt2, //矩形右下角坐标
const Scalar&color,
intthickness=1,
intlineType=8,
intshift=0)
1.3多边形
多边形即由多条边组成的图形,多条边形成折线。
void polylines(Mat& img,
const Point** pts, //指向折线中拐点坐标
const int* npts, //指向折线拐点个数
int ncontours, //折线线段数量
bool isClosed, //折线是否闭合
const Scalar& color,
int thickness=1,
int lineType=8,
int shift=0 )
1.4圆形
void circle(Mat&img,
Point center, //圆心坐标
int radius,//半径值
const Scalar&color,
intthickness=1,
intlineType=8,
intshift=0)
1.5椭圆
void ellipse(Mat& img,
Point center,//椭圆圆心坐标
Size axes, //椭圆主轴一半的长度值
double angle, //椭圆旋转角度
double startAngle, //椭圆弧起始角度
double endAngle, //椭圆弧终止角度
const Scalar& color,
int thickness=1,
int lineType=8,
int shift=0)
2.绘制文字
void putText(Mat& img,
const string& text, //待显示的文字
Point org, 文字在图像中的左下角 坐标
int fontFace, 字体类型
double fontScale,字体大小
Scalar color,
int thickness=1,
int lineType=8,
bool bottomLeftOrigin=false )
其中字体格式有如下选择:
FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN,
FONT_HERSHEY_DUPLEX, FONT_HERSHEY_COMPLEX,
FONT_HERSHEY_TRIPLEX, FONT_HERSHEY_COMPLEX_SMALL,
FONT_HERSHEY_SCRIPT_SIMPLEX, FONT_HERSHEY_SCRIPT_COMPLEX,
这些格式都可以配合 FONT_HERSHEY_ITALIC
以产生斜体效果。
3.ROI提取
ROI(region of interest)
提取就是提取图像中感兴趣的目标区域。
代码:
#include<opencv2/opencv.hpp>
#include<iostream>
//#include<Windows.h>
using namespace cv;
using namespace std;
int main(int argc, char**argv)
{
//get gray input image
Mat input_image = imread("./whisper.jpg", 1);
if (input_image.empty())
{
cout << "read input error!" << endl;
return -1;
}
//imshow("input", input_image);
int height = input_image.rows;
int width = input_image.cols;
//中心点坐标
int cy = height / 2, cx = width / 2;
Rect rect(cx - 100, cy - 100, 200, 200);
//直接赋值与原图中该区域占有同一块内存
Mat roi_rect = input_image(rect);
imshow("roi", roi_rect);
#if 0
//改变ROI则原图也会改变
roi_rect.setTo(Scalar(0, 0, 255));
imshow("input", input_image);
imshow("roi rect", roi_rect);
#endif
#if 1
//克隆
Mat roi_rect_copy = roi_rect.clone();
//改变ROI则原图不会改变
roi_rect_copy.setTo(Scalar(0, 0, 255));
imshow("input", input_image);
imshow("roi rect copy", roi_rect_copy);
#endif
waitKey(0);
destroyAllWindows();
return 0;
}
结果:
直接赋值:
克隆: