十四、图像几何形状绘制

项目功能实现:矩形、圆形、椭圆等几何形状绘制,并与原图进行相应比例融合
按照之前的博文结构来,这里就不在赘述了

一、头文件

drawing.h

#pragma once

#include<opencv2/opencv.hpp>

using namespace cv;

class DRAWING {
public:
	void drawing(Mat& image);
};

#pragma once

二、函数实现

drawing.cpp

Mat backgrand, result;
定义一个画布背景backgrand和进行融合之后的结果result
backgrand = Mat::zeros(image.size(), image.type());
背景图片的大小和原图一致,不过是全0的黑色背景

矩形绘制
Rect rect;
rect.x = 100;rect.y = 150;rect.width = 200;rect.height = 100;
rectangle(backgrand, rect, Scalar(255, 0, 0), -1, 8, 0);
参数一:处理的图片对象为backgrand
参数二:矩形的相关起始点以及宽高参数信息
参数三:颜色设置
参数四:-1表示填充,其余的正整数表示线条的宽度,数越大线条越宽
参数五:8这里代表LINE_8,其他参数还有LINE_4(可用4表示)、LINE_AA((可用16表示))
每个像素点都是浮点数,连线的时候会产生锯齿,通过相邻8个像素点进行消除锯齿
定义矩形的起始位置(x,y),以及矩形的高(y)和宽(x)
参数六:表示偏移量类似微调的效果,默认0即可

圆形绘制
circle(backgrand, Point(150, 150), 15, Scalar(0, 255, 0 ), 1);
参数一:处理的图片对象为backgrand
参数二:圆心位置
参数三:半径
参数四:颜色设置
参数五:线条宽度,-1表示填充,其他正整数表示线条粗细

线条绘制
line(backgrand, Point(100, 100), Point(200, 200), Scalar(255, 255, 255), 4, LINE_8, 0);
参数一:处理的图片对象为backgrand
参数二:起始位置
参数三:结束位置
参数四:颜色设置
参数五:线条宽度
参数六:和上面类似,LINE_8也可通过数字8进行替代
参数七:微调,偏移量,默认0即可

椭圆绘制
RotatedRect rrt;
rrt.center = Point(200, 200);rrt.size = Size(120, 90);rrt.angle = 90.0;
ellipse(backgrand, rrt, Scalar(0, 255, 255), 2, LINE_AA);
参数一:处理的图片对象为backgrand
参数二:椭圆绘制的相关参数信息,包括椭圆中心位置、角度等
参数三:颜色设置
参数四:线条宽度
参数五:和上面类似,LINE_AA也可通过数字16进行替代

特征融合
addWeighted(image, 0.7, backgrand, 0.3, 0, result);
原图image和背景图片backgrand按7:3进行融合,最终输出结果对象为result
这里的0表示beta也是一个偏移量微调的作用

#include"drawing.h"
#include<iostream>
#include<opencv2/opencv.hpp>

void DRAWING::drawing(Mat& image) {
	Mat backgrand, result;
	backgrand = Mat::zeros(image.size(), image.type());
	
	
	Rect rect;
	rect.x = 100;
	rect.y = 150;
	rect.width = 200;
	rect.height = 100;
	rectangle(backgrand, rect, Scalar(255, 0, 0), -1, 8, 0);
	
	circle(backgrand, Point(150, 150), 15, Scalar(0, 255, 0 ), 1);
	
	line(backgrand, Point(100, 100), Point(200, 200), Scalar(255, 255, 255), 4, LINE_AA, 0);
	
	RotatedRect rrt;
	rrt.center = Point(200, 200);
	rrt.size = Size(120, 90);
	rrt.angle = 90.0;
	ellipse(backgrand, rrt, Scalar(0, 255, 255), 2, LINE_AA);
	
	imshow("Drawing", backgrand);

	addWeighted(image, 0.7, backgrand, 0.3, 0, result);
	imshow("result", result);

}

三、主函数

yy_main.cpp

#include <opencv2/opencv.hpp>
#include <iostream>
#include "drawing.h"

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	Mat src = cv::imread("E:/C++_workspace/beyond.jpg", IMREAD_COLOR);

	if (src.empty()) {
		printf("load image is false...\n");
		return -1;
	}

	namedWindow("yanyu", WINDOW_FREERATIO);
	imshow("yanyu", src);

	DRAWING yy;
	yy.drawing(src);

	waitKey(0);
	destroyAllWindows();

	return 0;
}

项目结构如下:
在这里插入图片描述
效果图如下:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“最会写”的中文大模型Weaver来了,中文创意写作能力超GPT-4

分享&#xff5c; Weaver ChatGPT等通用大模型支持的功能成百上千&#xff0c;但是对于普通日常用户来说&#xff0c;智能写作一定是最常见的&#xff0c;也是大模型最能真正帮上忙的使用场景之一。尽管大模型经常能写出看起来像模像样的文字&#xff0c;但是大多数情况下内容…

详细·Kubeadm安装

目录 实验前准备部署K8S集群初始化kubeadm&#xff08;只需要master做&#xff09;部署网络插件flannel测试 pod 资源创建 测试访问部署Dashboard&#xff08;master01&#xff09;浏览器访问 实验前准备 master&#xff1a;192.168.188.11 node01&#xff1a;192.168.188.13 …

Code Composer Studio (CCS) - 全局搜索功能

Code Composer Studio [CCS] - 全局搜索功能 1. Ctrl H&#xff0c;全局搜索功能References 1. Ctrl H&#xff0c;全局搜索功能 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

如何用代理IP防止被泄露真实IP地址?

随着互联网的普及&#xff0c;我们的网络行为越来越离不开IP地址。然而&#xff0c;由于一些不法分子利用IP地址进行网络攻击、窃取个人信息等行为&#xff0c;保护我们的真实IP地址变得尤为重要。代理IP地址是一种隐藏真实IP地址的方法&#xff0c;通过使用代理服务器来中转网…

Cartographer 栅格地图更新

栅格地图更新过程 首先来了一帧雷达数据&#xff0c;对应到每一个栅格点&#xff0c;即观测得到该栅格点是occupied或者是Free。 在cartographer中&#xff0c;使用CorrespondenceCostValue&#xff08;整数表示的空闲概率&#xff09;表示栅格状态&#xff0c;所以现在的目的就…

学习鸿蒙背后的价值?星河版开放如何学习?

现在是2024年&#xff0c;华为在1月18开展了鸿蒙千帆起仪式发布会。宣布了鸿蒙星河版&#xff0c;并对开发者开放申请&#xff0c;此次发布会主要是说明了&#xff0c;鸿蒙已经是全栈自研底座&#xff0c;鸿蒙星河版本的编程语言改为ArkTS/仓颉&#xff0c;内核改为鸿蒙原生内核…

5.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-测试需求与需求拆解

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;模拟游戏登陆器启动游戏并且完成注入 首先正常分析软件程序有没有漏洞&#xff0c;需要通过它的操作侵入&#xff0c;比如买东西&#xff0c;就通过买东西的按钮它背后有源代码就看源代码&#xff0c…

开启MySQL远程访问权限,允许远程连接

1、登录mysql数据库 mysql -u root –p 如果端口不是默认的3306&#xff0c;此处端口为3308&#xff0c;使用该指令&#xff1a; mysql –u root –port3308 -p 2、输入密码&#xff1a; 3、使用mysql&#xff0c;查看user表 use mysql; 4、查询user表&#xff0c;root账…

SpringBoot启动报错:Failed to load property source from ‘file:/D:.....

SpringBoot启动报错&#xff1a;Failed to load property source from file:/D:… SpringBoot启动爆如图的错误 2024-02-22 20:57:42.865 ERROR 23024 --- [ restartedMain] o.s.boot.SpringApplication : Application run failedjava.lang.IllegalStateExce…

Centos7环境下安装Docker详细步骤

目录 0.前言 1.卸载旧版 2.配置Docker的yum库 3.安装Docker 4.启动和校验 5.配置镜像加速 5.1.注册阿里云账号 5.2.开通镜像服务 5.3.配置镜像加速 0.前言 环境&#xff1a;Centos7 推荐&#xff1a;买个Centos7阿里或者腾讯云服务&#xff0c;这样就可以不用安装虚…

智慧养老驿站健康监测系统场景需求和技术要求

场景建设需求 1.场景建设核心任务目标 搭建养老驿站的健康检测系统平台&#xff0c;以智慧化手段整合数据、视屏、物联设备&#xff0c;全方位提升对政府、老人、养老机构、服务机构、服务人员等对象的服务支撑能力&#xff0c;赋能居家养老、社区养老、机构养老等多种养老模…

消息中间件之RocketMQ源码分析(十二)

Namesrv启动流程 Broker启动流程 BrokerStartup.java类主要负责为真正的启动过程做准备&#xff0c;解析脚本传过来的参数&#xff0c;初始化Broker配置&#xff0c;创建BrokerController实例等工作。BrokerController.java类是Broker的掌控者&#xff0c;它管理和控制Broker的…

2.21 Qt day2 菜单栏/工具栏/状态栏/浮动窗口、UI界面、信号与槽

思维导图 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;…

【Java 面试题】MySQL与Redis 如何保证双写一致性

目录 方案一:延时双删方案二: 删除缓存重试机制方案三:读取biglog异步删除缓存系列文章版本记录方案一:延时双删 延时双删流程 先删除缓存再更新数据库休眠一会(比如1秒),再次删除缓存。这个休眠一会,一般多久呢?都是1秒? 这个休眠时间 = 读业务逻辑数据

计算机网络:传输层知识点汇总

文章目录 一、传输层概述二、UDP协议三、TCP协议特点和TCP报文段格式四、TCP连接管理五、TCP可靠传输六、TCP流量控制七、TCP拥塞控制 一、传输层概述 我们通信的时候&#xff0c;虽然都说是主机之间的通信&#xff0c;但实际是主机之间的进程和进程通信。比如我和你发微信&am…

【AIGC】开源声音克隆GPT-SoVITS

GPT-SoVITS 是由 RVC 创始人 RVC-Boss 与 AI 声音转换技术专家 Rcell 共同开发的一款跨语言 TTS 克隆项目&#xff0c;被誉为“最强大中文声音克隆项目” 相比以往的声音克隆项目&#xff0c;GPT-SoVITS 对硬件配置的要求相对较低&#xff0c;一般只需 6GB 显存以上的 GPU 即可…

mysql 2-22

变量 查看系统变量 修改 用户变量 赋值 定义处理程序 流程控制 IF CASE LOOP语句 WHILE循环 REPEAT leave ITERATE 游标 使用步骤 全局系统变量持久化 触发器 查看触发器 优点 MYSQL8的新特性 移除的旧特性 窗口函数 公用表表达式 JDBC 存储引擎 MYISAM存储引擎 InnoDB存储引擎…

【已解决】c++如何将文件夹打包成zip

c将文件夹或者文件打包成zip是需要用到第三方库&#xff0c;本博文假设读者都已安装了zlib库了&#xff0c;这里就直接使用了。如果读者没有安装好&#xff0c;可以参考我的上一篇博文 vs2015零基础编译zlib从失败到成功 文章目录 1、配置目录2、源码3、代码效果 1、配置目录 …

Druid无法登录监控页面

问题表现&#xff1a;在配置和依赖都正确的情况下&#xff0c;无法通过配置的用户名密码登录Druid的监控页面 检查配置发现 配置的用户名和密码和请求中参数是一致的&#x1f914; Debug发现 ResourceServlet 是Druid的登录实现&#xff0c; 且调试发现usernameParam是null&am…

文件上传漏洞--Upload-labs--Pass131415--图片马

声明&#xff1a;Pass13、14、15 都使用相同手段--图片马进行绕过。 一、什么是图片马 顾名思义&#xff0c;图片马即 图片 木马。将恶意代码插入图片中进行上传&#xff0c;绕过白名单。 图片马制作流程&#xff1a; 1、在文件夹中打开 cmd&#xff0c;输入指令。 /b&…
最新文章