数字图像基本OP:OpenCV绘制几何图形和文字总结及ROI提取

数字图像基本OP:OpenCV绘制几何图形和文字总结及ROI提取

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;
}

结果:
直接赋值:在这里插入图片描述
克隆:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值