opencv中绘制图像的函数

常用函数简介

OpenCV 中用于绘制不同图形的 C++ 函数的简要介绍:

  1. 绘制矩形框:

    cv::rectangle(image, cv::Point pt1, cv::Point pt2, cv::Scalar color, int thickness);
    • image:目标图像
    • pt1 和 pt2:矩形的对角线顶点坐标
    • color:矩形的颜色
    • thickness:线条的粗细,如果为负数,表示填充矩形
  2. 绘制文字:

    cv::putText(image, text, cv::Point org, int fontFace, double fontScale, cv::Scalar color, int thickness);
    • image:目标图像
    • text:要绘制的文本
    • org:文本的起始坐标
    • fontFace:字体类型
    • fontScale:字体缩放因子
    • color:文本颜色
    • thickness:线条的粗细
  3. 绘制圆:

    cv::circle(image, cv::Point center, int radius, cv::Scalar color, int thickness);
    • image:目标图像
    • center:圆心坐标
    • radius:半径
    • color:圆的颜色
    • thickness:线条的粗细,如果为负数,表示填充圆
  4. 绘制椭圆:

    cv::ellipse(image, cv::Point center, cv::Size axes, double angle, double startAngle, double endAngle, cv::Scalar color, int thickness);
    • image:目标图像
    • center:椭圆中心坐标
    • axes:长轴和短轴的大小
    • angle:椭圆旋转角度
    • startAngle 和 endAngle:椭圆的起始和结束角度
    • color:椭圆的颜色
    • thickness:线条的粗细,如果为负数,表示填充椭圆
  5. 绘制线段:

    cv::line(image, cv::Point pt1, cv::Point pt2, cv::Scalar color, int thickness);
    • image:目标图像
    • pt1 和 pt2:线段的起点和终点坐标
    • color:线段的颜色
    • thickness:线条的粗细
  6. 绘制多边形:

    cv::polylines(image, std::vector<std::vector<cv::Point>> contours, bool isClosed, cv::Scalar color, int thickness);
    • image:目标图像
    • contours:多边形的顶点坐标
    • isClosed:是否封闭多边形
    • color:多边形的颜色
    • thickness:线条的粗细
  7. 绘制填充多边形:

    cv::fillPoly(image, std::vector<std::vector<cv::Point>> contours, cv::Scalar color);
    • image:目标图像
    • contours:多边形的顶点坐标
    • color:填充颜色
  8. 绘制箭头:

    cv::arrowedLine(image, cv::Point pt1, cv::Point pt2, cv::Scalar color, int thickness, int line_type, int tipLength);
    • image:目标图像
    • pt1 和 pt2:箭头的起点和终点坐标
    • color:箭头的颜色
    • thickness:线条的粗细
    • line_type:线条的类型
    • tipLength:箭头的尖端长度

测试例子

在C++中使用OpenCV库可以轻松实现在图像上绘制矩形框、文字、圆、椭圆、线段、多边形等各种图形和操作。以下是一些示例代码来演示如何在图像上执行这些操作:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>int main() {// 创建一个空白图像cv::Mat image = cv::Mat::zeros(400, 400, CV_8UC3);// 在图像上绘制矩形框cv::rectangle(image, cv::Point(50, 50), cv::Point(150, 150), cv::Scalar(0, 0, 255), 2);// 在图像上绘制文字cv::putText(image, "OpenCV", cv::Point(160, 180), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);// 在图像上绘制圆cv::circle(image, cv::Point(200, 200), 50, cv::Scalar(0, 255, 0), 2);// 在图像上绘制椭圆cv::ellipse(image, cv::Point(300, 300), cv::Size(60, 40), 45, 0, 360, cv::Scalar(255, 0, 0), 2);// 在图像上绘制线段cv::line(image, cv::Point(50, 200), cv::Point(150, 300), cv::Scalar(255, 0, 255), 2);// 在图像上绘制多边形(五角星)std::vector<cv::Point> star_points;star_points.push_back(cv::Point(250, 50));star_points.push_back(cv::Point(265, 100));star_points.push_back(cv::Point(305, 100));star_points.push_back(cv::Point(280, 130));star_points.push_back(cv::Point(295, 175));star_points.push_back(cv::Point(250, 150));star_points.push_back(cv::Point(205, 175));star_points.push_back(cv::Point(220, 130));star_points.push_back(cv::Point(195, 100));star_points.push_back(cv::Point(235, 100));cv::polylines(image, star_points, true, cv::Scalar(255, 255, 0), 2);// 在图像上绘制贝叶斯曲线cv::Mat curve_image = cv::Mat::zeros(400, 400, CV_8UC3);std::vector<cv::Point> curve_points;for (int x = 0; x < curve_image.cols; x++) {int y = 200 - static_cast<int>(50 * sin(x * 0.05));curve_points.push_back(cv::Point(x, y));}cv::polylines(curve_image, curve_points, false, cv::Scalar(0, 255, 255), 2);// 创建一个子图,将子图绘制到图片上// 创建子图像(ROI)cv::Rect roi_rect(100, 100, 200, 150);  // 在(100, 100)位置创建一个200x150的子图像cv::Mat roi = image(roi_rect);// 在子图像上绘制一个矩形cv::rectangle(roi, cv::Point(20, 20), cv::Point(180, 130), cv::Scalar(0, 0, 255), 2);// 在子图像上绘制文字cv::putText(roi, "Subimage", cv::Point(40, 40), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);// 显示图像cv::imshow("Shapes", image);cv::imshow("Sin Curve", curve_image);// 等待按键cv::waitKey(0);return 0;
}

上述示例代码创建了一个400x400的空白图像,然后在图像上绘制矩形框、文字、圆、椭圆、线段和多边形(五角星),以及一个sin曲线 子图。您可以根据需要修改图形的位置、颜色、大小等参数。请确保您的C++项目中已正确包含OpenCV库并已配置编译环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/127735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组类型题目总结

跟着代码随想录的算法训练营进行训练 目前刷的数组 大部分都是需要遍历后 修改、移动、覆盖元素。 在不使用额外辅助空间的情况下&#xff1a; 在需要进行前后元素对比&#xff0c;使用双层for循环遍历的题目&#xff0c;有增删改查的操作时&#xff0c;就可以考虑使用双指针进…

Scala基本数据类型和运算符

1.数据类型 1.1 类型支持 Scala 拥有下表所示的数据类型&#xff0c;其中 Byte、Short、Int、Long 和 Char 类型统称为整数类型&#xff0c;整数类型加上 Float 和 Double 统称为数值类型。Scala 数值类型的取值范围和 Java 对应类型的取值范围相同。 数据类型 描述 Byte 8 …

百度竞价排名推广对比自然排名哪一个更具优势-华媒舍

在搜索引擎结论网页页面&#xff08;SERP&#xff09;中&#xff0c;我们经常会看到一些网站链接及其广告栏。这种连接一般分为两种类型&#xff1a;百度竞价推广排名推广与自然排名。究竟哪个更有优势&#xff1f;本文将对这几种排名形式进行科谱详细介绍。 什么叫百度竞价推广…

百度 | 文心一言也开始收费了

好久没用文心一言了 之前一直用ChatGPT的 今天打开文心一言一看&#xff0c;好家伙 出了文心大模型4.0&#xff0c;想体验一下来着 可惜是收费的 看下价格&#xff0c;没买 50块钱一个月&#xff0c;对比ChatGPT4来说&#xff0c;确实不算贵 毕竟gpt4一个月20美刀 &#xff0c;…

LEEDCODE 709转换成小写字母

class Solution { public:string toLowerCase(string s) {int len s.length();string a "";for(int i 0; i < len; i){if(s[i] > 65 && s[i] < 90){a (s[i] 32);}elsea s[i];}// cout<<a<<endl;return a;} };

Docker Compose部署Spug:实现内网穿透

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

国内可用超丝滑ChatGPT4.0(附网址及微信入口)

镜像网站的设置可以带来以下优势&#xff1a; 1.提高访问速度&#xff1a;由于镜像网站部署在全球不同的服务器上&#xff0c;用户可以从最近的服务器访问网站&#xff0c;从而减少延迟和提高加载速度。 2.增加可用性&#xff1a;如果主网站遭遇故障或网络拥堵&#xff0c;用…

Mac 安装使用NPM及常用命令

环境&#xff1a; Mac 工具&#xff1a; NPM 可通过官网查询一些模块相关 NPM Doc 通过官网文档了解更多的关于NPM的使用 安装 NPM是Node.js的包管理工具&#xff0c;可用于解决 Node.js在代码部署上的问题。 新版本的Node.js已经集成了NPM&#xff0c; 因此可通过下载 Nod…

安全架构的设计理论与实践

安全架构的设计理论与实践 安全架构概述 信息安全面临的威胁 安全架构的定义和范围 信息安全相关的国内外标准及组织 主要安全模型 状态机模型(BLP)模型 Bell-IaPadula模型 Biba模型 Clark-Wilson (CWM)模型 ChineseWall模型 系统安全体系架构规划框架 安全技术体系架构 信息系…

浏览器请求http地址,自动跳转成https

谷歌浏览器&#xff1a; 点击url地址左侧的锁&#xff0c;选择【网站设置】 点击【隐私和安全】&#xff0c;将【不安全内容】改为允许&#xff0c;然后刷新即可

kill-port,跨平台解决端口占用问题

在日常开发中&#xff0c;端口占用问题一直是令人头疼的难题。为了更高效地管理端口资源&#xff0c;开发者们经常需要一种快速而可靠的解决方案。在这方面&#xff0c;kill-port 的出现为我们提供了一种强大而便捷的工具。本篇博客将深入介绍 kill-port 解决端口占用问题的优势…

软考高级系统架构设计师系列之:UML建模、设计模式和软件架构设计章节选择题详解

软考高级系统架构设计师系列之:UML建模、设计模式和软件架构设计章节选择题详解 一、设计模式二、4+1模型三、面向对象的分析模型四、构件五、基于架构的软件设计六、4+1视图七、软件架构风格八、特定领域软件架构九、虚拟机十、架构评估十一、敏感点和权衡点十二、分层结构一…

GPT的广泛应用会对互联网公司造成挑战吗?——探讨GPT在实际使用中的应用和影响

文章目录 前言GPT 技术的背景和发展历程GPT 技术对互联网行业的影响GPT 技术在互联网行业中的应用GPT 技术对于用户隐私和数据安全的威胁GPT 技术对于人类工作岗位的影响加强 AI 伦理和监管加强 AI 安全性和隐私保护推动 AI 创新和发展&#xff0c;避免过度依赖 AIGPT 技术是一…

图片批量添加文件名水印

图片现在需要批量添加水印很简单&#xff0c;但是需要添加的水印内容为文件名称比较麻烦。 同时有些能添加文件名称的又有后缀例如&#xff08;.jpg、.png等等&#xff09; 这里有个软件可以选择是否加后缀&#xff0c;或者使用图片文件大小来当水印都可以。

React Hooks的使用

目录 1.React Hooks使用注意事项 1.useState Hook&#xff1a; 2.useEffect Hook&#xff1a; 3.其他常用Hooks&#xff1a; 2.使用React Hooks需要遵循 1.安装React&#xff1a; 2.导入所需的Hooks&#xff1a; 3.使用Hooks创建组件&#xff1a; 4.在应用中使用组件&…

lua-resty-request库写入爬虫ip实现数据抓取

根据提供的引用内容&#xff0c;正确的库名称应该是lua-resty-http&#xff0c;而不是lua-resty-request。使用lua-resty-http库可以方便地进行爬虫&#xff0c;需要先安装OpenResty和lua-resty-http库&#xff0c;并将其引入到Lua脚本中。然后&#xff0c;可以使用lua-resty-h…

PLSql调试问题解析

最近因为工作问题需要弄一个Orale数据库导出Dmp文件&#xff0c;直接命令行执行很麻烦&#xff0c;于是用PLSql来操作&#xff0c;在配置链接的过程中遇到很多问题&#xff0c;下面把问题及解决方法贴在这里记录一下 1、ORA-12504&#xff1a;TNS&#xff1a;监听程序在CONNEC…

Distilling the Knowledge in a Neural Network学习笔记

1.主要内容是什么&#xff1a; 这篇论文介绍了一种有效的知识迁移方法——蒸馏&#xff0c;可以将大型模型中的知识转移到小型模型中&#xff0c;从而提高小型模型的性能。这种方法在实际应用中具有广泛的潜力&#xff0c;并且可以应用于各种不同的任务和领域。 论文中首先介绍…

深度学习之基于ResNet18的神经网络水果分类系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介二、功能三、神经网络水果分类系统四. 总结 一项目简介 基于ResNet18神经网络的水果分类系统是一个利用深度学习技术进行水果图像分类的系统。下面是该系统…