OpenCV: 画框和矩形

news/2024/11/9 10:07:30/

本文主要内容:

一、介绍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);
}

 


http://www.ppmy.cn/news/544405.html

相关文章

c#矩形框的绘制

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 画笔 {public partial class Form1 …

画框

画框的代码 HWND hWndDesk ::GetDesktopWindow(); HDC DeskDC ::GetWindowDC(hWndDesk); //取得桌面设备场景 int oldRop2 SetROP2(DeskDC, /*R2_NOTXORPEN*/R2_NOTXORPEN); HPEN newPen ::CreatePen(0, 3, 0); //建立新画笔,载入DeskDC HGDIOBJ oldPen ::SelectObject(D…

快速查询银行卡发卡省市和归属银行,了解自己的财务状况!

API接口是现代软件开发的基本组成部分。它们允许应用程序通过互联网连接到其他软件系统&#xff0c;并从这些系统中获取或传输数据。银行卡归属地查询API接口是为开发人员提供的一种工具&#xff0c;可以帮助他们轻松地查询银行卡的归属地信息。在本文中&#xff0c;我们将介绍…

R语言利用克里金插值法绘制研究区降水等值线图

要在R语言中根据Excel表中的多站点降水数据&#xff0c;利用克里金插值法绘制研究区的降水等值线图&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 准备数据&#xff1a;将Excel表中的多站点降水数据导入R中。可以使用readxl包来读取Excel文件&#xff0c;确保已经安装…

斗地主的规则|欢乐斗地主的规则

斗地主牌型 火箭&#xff1a;即双王&#xff08;大王和小王&#xff09;&#xff0c;最大的牌。 &#xff1a;四张同数值牌&#xff08;如四个 7 &#xff09;。 单牌&#xff1a;单个牌&#xff08;如红桃 5 &#xff09;。 对牌&#xff1a;数值相同的两张牌&#xff08;如…

斗地主积分

"""斗地主积分""" print("***欢迎来到斗地主积分程序***") A input("第一个人的名字") B input("第二个人的名字") C input("第三个人的名字") a 0 b 0 c 0 while True: dizhu …

QQ欢乐豆斗地主心得体会(四):合谋赢豆

刚刚又在玩QQ欢乐斗地主&#xff0c;只可惜&#xff0c;这次不够欢乐。 本金&#xff0c;300万豆&#xff0c;运气比较好&#xff0c;赢到将近400万。突然&#xff0c;形势急转直下&#xff0c;一直输&#xff0c;一直到180多万豆。本来这一局&#xff0c;有硬炸在手&#xff0…

使用yolov5和强化学习训练一个AI智能欢乐斗地主(一)

这里写自定义目录标题 项目介绍项目过程介绍训练yolov5目标检测斗地主收集数据集yolov5调参 项目介绍 你好&#xff01; 欢迎阅读我的文章&#xff0c;本章将介绍&#xff0c;如何使用yolov5和强化学习训练一个AI斗地主&#xff0c;本项目将分为三个部分&#xff0c;其中包含&…