Opencv绘图之rectangle、circle、line、ellipse、Rect、RotatedRect、Point

2024-02-21 06:28

本文主要是介绍Opencv绘图之rectangle、circle、line、ellipse、Rect、RotatedRect、Point,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenCV中提供了多种函数来在图像上绘制各种基本形状,如矩形、圆形、线条、椭圆等。同时,RectRotatedRect是用来表示矩形区域的类,它们在图像处理中非常有用,尤其是在需要定义和操作图像区域时。Point类用于表示二维空间中的一个点。这个类在处理图像或绘图时非常有用,比如标定图像中的位置、定义形状的顶点等。

1.Point类

Point类有几个不同的变体,其中Point_<T>是一个模板类,它允许你使用任何数值类型(如intfloatdouble等)来表示点的坐标。最常用的变体是Point(等同于Point_<int>,用整数坐标表示)和Point2f(等同于Point_<float>,用浮点数坐标表示)。

// 使用整数坐标定义一个点
Point pt1(10, 20);// 使用浮点数坐标定义一个点
Point2f pt2(10.5f, 20.5f);

点的加减

可以将两个点相加或相减,得到一个新的点。

Point pt3 = pt1 + Point(5, 5); // 将pt1向右下方移动5个单位
Point pt4 = pt1 - Point(5, 5); // 将pt1向左上方移动5个单位

与标量的运算

Point pt5 = pt1 * 2;  // 将pt1的坐标值放大2倍
Point pt6 = pt1 / 2;  // 将pt1的坐标值缩小2倍

应用

在图像处理和计算机视觉中,Point类经常与其他OpenCV函数一起使用,比如在图像上绘制图形、标定特定区域、计算形状的几何属性等。

// 创建一个空白图像
Mat image = Mat::zeros(Size(400, 400), CV_8UC3);// 在图像上绘制一个圆,使用Point类指定圆心位置
circle(image, Point(200, 200), 50, Scalar(255, 0, 0), -1);// 显示图像
imshow("Circle", image);
waitKey(0);

2.Rect类

用于表示图像中的矩形区域。

Rect(int x, int y, int width, int height);
  • x, y:矩形左上角的坐标。
  • width, height:矩形的宽度和高度。

3.RotatedRect类

用于表示旋转的矩形。

RotatedRect(const Point2f& center, const Size2f& size, float angle);
  • center:旋转矩形的中心点。
  • size:矩形的尺寸(宽度和高度)。
  • angle:矩形相对于水平轴的旋转角度。

4. 绘制矩形:rectangle

void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
  • img:目标图像。
  • pt1:矩形的一个顶点。
  • pt2:矩形对角线上的另一个顶点。
  • color:矩形颜色。
  • thickness:边框的厚度。负值(如FILLED)表示填充矩形。
  • lineType:线条的类型,如LINE_8(8-connected line)。

5.绘制圆形:circle

void circle(Mat& img, Point center, int radius, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
  • img:目标图像。
  • center:圆心坐标。
  • radius:圆的半径。
  • color:圆的颜色。

6.绘制线条:line

void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
  • img:目标图像。
  • pt1, pt2:线条的起点和终点。
  • color:线条的颜色。

7.绘制椭圆:ellipse

void ellipse(Mat& img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
  • img:目标图像。
  • center:椭圆的中心点。
  • axes:椭圆的主轴和次轴长度。
  • angle:椭圆的旋转角度。
  • startAngle,endAngle:椭圆弧的起始和结束角度。

8.小例子

8//图像几何图像绘制
void QuickDemo::draw_demo(Mat &image) {Rect rect;rect.x = 100;rect.y = 100;rect.width = 150;rect.height = 200;Mat bg = Mat::zeros(image.size(), image.type());rectangle(bg, rect, Scalar(0, 0, 255), 5, 8, 0);circle(bg, Point(250, 300), 15, Scalar(255, 0, 0), 5, 8, 0);line(bg, Point(100, 100), Point(250, 300), Scalar(0, 255, 0), 5, 8, 0);RotatedRect rrt;rrt.center = Point(180, 190);rrt.size = Size(50, 100);rrt.angle = 90.0;ellipse(bg, rrt, Scalar(0, 255, 255), -1, 8);Mat dst;addWeighted(image, 0.3, bg, 0.7, 0, dst);imshow("bg", bg);imshow("dst", dst);
}

在这里插入图片描述

这篇关于Opencv绘图之rectangle、circle、line、ellipse、Rect、RotatedRect、Point的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730838

相关文章

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

Verybot之OpenCV应用三:色标跟踪

下面的这个应用主要完成的是Verybot跟踪色标的功能,识别部分还是居于OpenCV编写,色标跟踪一般需要将图像的颜色模式进行转换,将RGB转换为HSV,因为对HSV格式下的图像进行识别时受光线的影响比较小,但是也有采用RGB模式来进行识别的情况,这种情况一般光线条件比较固定,背景跟识别物在颜色上很容易区分出来。         下面这个程序的流程大致是这样的:

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采