OpenCV: 画框和矩形

本文主要内容:

一、介绍OpenCV中三个绘图函数:circle() 、ellipse()  、rectangle()

1.Circle

绘制圆形。

void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,
               int thickness=1, int line_type=8, int shift=0 );

img :图像。

center :圆心坐标。

radius : 圆形的半径。

color : 线条的颜色。

thickness : 如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充。

line_type ; 线条的类型。见 cvLine 的描述

shift ; 圆心坐标点和半径值的小数点位数。

函数cvCircle绘制或填充一个给定圆心和半径的圆。圆被感兴趣矩形所裁剪。 若指定圆的颜色,可以使用宏 CV_RGB ( r, g, b )。

#include<opencv2/core/core.hpp> //包含程序所使用的头文件和命名空间
#include<opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;
#define Win_Name2 "Audi 奥迪"

int main(int argc, char** argv)
{

//绘制奥迪Audi车标
Mat image2 = Mat::zeros(600, 850, CV_8UC3);//生成一个850x600的窗口
circle(image2, Point(200, 300), 100, Scalar(225, 0, 225), 7, 8); //绘制第一个圆,半径为100,圆心(200,300),颜色为紫色
imshow(Win_Name2, image2);
waitKey();
return 0;

}

2.Ellipse

绘制椭圆圆弧和椭圆扇形。

void cvEllipse( CvArr* img, CvPoint center, CvSize axes, double angle,
                double start_angle, double end_angle, CvScalar color,
                int thickness=1, int line_type=8, int shift=0 );

img; 图像。

center : 椭圆圆心坐标。

axes : 轴的长度。

angle; 偏转的角度。

start_angle : 圆弧起始角的角度。.

end_angle; 圆弧终结角的角度。

color : 线条的颜色。

thickness : 线条的粗细程度。

line_type ; 线条的类型,见CVLINE的描述。

shift ; 圆心坐标点和数轴的精度。

函数cvEllipse用来绘制或者填充一个简单的椭圆弧或椭圆扇形。圆弧被ROI矩形所忽略。反走样弧线和粗弧线使用线性分段近似值。所有的角都是以角度的形式给定的。

//----------------基本几何图像的绘制---------------

//包含程序所使用的头文件和命名空间

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;

#define Win_Name1 "Toyota 丰田"
//main函数
int main(int argc, char** argv)
{
//绘制丰田车标
Mat image1 = Mat::zeros(900, 900, CV_8UC3);//900x900的窗口
ellipse(image1, Point(450, 450), Size(400, 250), 0, 0, 360, Scalar(0, 0, 225), 5, 8);//绘制第一个椭圆,大椭圆,颜色为红色
imshow(Win_Name1, image1);
waitKey();
return 0;
}

 

3.Rectangle

绘制简单、指定粗细或者带填充的 矩形

void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,
                  int thickness=1, int line_type=8, int shift=0 );

img : 图像.

pt1; 矩形的一个顶点。

pt2 ; 矩形对角线上的另一个顶点

color; 线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。

thickness : 组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。

line_type; 线条的类型。见cvLine的描述

shift ; 坐标点的小数点位数。 

函数 cvRectangle 通过对角线上的两个顶点绘制矩形。

//包含程序所使用的头文件和命名空间

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;

//宏定义部分

#define Win_Name3 "Cross 红十字"
//main函数
int main(int argc,char** argv)
{
<span style="white-space:pre"> </span>//绘制红十字
Mat image3 = Mat::zeros(800, 800, CV_8UC3);//生成一个800x800的窗口
Rect rec1 = Rect(100, 300, 600, 200);
rectangle (image3, rec1,Scalar(0, 0, 255), -1, 8, 0);//横矩形
rectangle (image3, Point(100, 300), Point(700, 500), Scalar(0, 255, 255), 2, 8, 0);//黄色矩形镶边
imshow(Win_Name3, image3);
waitKey();
return 0;
}

opencv中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数——在图像上绘制文字。这个函数即是cv::putText()。

具体形式如下:

void cv::putText(

cv::Mat& img, // 待绘制的图像
const string& text, // 待绘制的文字
cv::Point origin, // 文本框的左下角
int fontFace, // 字体 (如cv::FONT_HERSHEY_PLAIN)
double fontScale, // 尺寸因子,值越大文字越大
cv::Scalar color, // 线条的颜色(RGB)
int thickness = 1, // 线条宽度
int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)
bool bottomLeftOrigin = false // true='origin at lower left'
);

{
      std::string text = "Hello World!";
	int font_face = cv::FONT_HERSHEY_COMPLEX; 
	double font_scale = 2;
	int thickness = 2;
	int baseline;
 
	//将文本框居中绘制
	cv::Point origin; 
	origin.x = image.cols / 2 - text_size.width / 2;
	origin.y = image.rows / 2 + text_size.height / 2;
	cv::putText(image, text, origin, font_face, font_scale, cv::Scalar(0, 255, 255), 
    thickness, 8, 0);
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值