十四、图像几何形状绘制

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

一、头文件

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.hqwc.cn/news/484783.html

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

相关文章

解决Jenkins-2.396启动报错:Failed to start Jenkins Continuous Integration Server.

场景&#xff1a;现有环境已经使用Java 8在运行业务&#xff0c;安装Jenkins后启动报错。 原因&#xff1a;因为Jenkins-2.396 依赖于Java 11 版本才能启动。 解决方法&#xff1a; yum 安装Java11 yum install java-11-openjdk-devel java-11-openjdk 或者二进制安装java11修…

「Web架构模式」模式:前端的后端(BFF)

面向用户界面和外部方的单用途边缘服务 介绍 随着web的出现和成功&#xff0c;交付用户界面的实际方式已经从厚客户端应用程序转变为通过web交付的界面&#xff0c;这一趋势也使基于SAAS的解决方案总体上得以发展。通过web提供用户界面的好处是巨大的——主要是因为发布新功能的…

【监督学习之线性回归】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱 简述概要 了解什么是线性回归 知识图谱 监督学习中的线性回归是一种预测模型&#xff0c;它试图通过拟合一个线性方程来建立输入变量&#xff08;特征&#xff09;和输出变量&#xff08;目标值&#x…

抢位|面向所有软件工程师的北京线下技术活动

参加一场线下活动&#xff0c;收获所有软件工程师都会遇到的三大技术难题的创新解决思路&#xff01; ​当我们谈论性能时&#xff0c;我们在谈论什么 性能优化在软件工程中扮演着关键角色&#xff0c;它直接影响系统的运行效率和用户体验。 作为 Tubi 高级研发副总裁&#…

Docker学习一

一 Docker简介 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用…

C++面试宝典第31题:有效的数独

题目 判断一个9 x 9的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 1、数字1-9在每一行只能出现一次。 2、数字1-9在每一列只能出现一次。 3、数字1-9在每一个以粗实线分隔的3 x 3宫内只能出现一次。 下图是一个部分填充的有效的数独,数独部分空格内已…

代码随想录算法训练营第21天—回溯算法01 | ● 理论基础 ● *77. 组合

理论基础 回溯是一种纯暴力搜索的方法&#xff0c;它和递归相辅相成&#xff0c;通常是执行完递归之后紧接着执行回溯相较于以往使用的for循环暴力搜索&#xff0c;回溯能解决更为复杂的问题&#xff0c;如以下的应用场景应用场景 组合问题 如一个集合{1,2,3,4}&#xff0c;找…

MySQL数据库调优之 explain的学习

性能分析工具的使用 在数据库调优中&#xff0c;目标就是响应时间更快&#xff0c;吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮助快速找到调优的思路与方式。 1.数据库服务器的优化步骤 整个流程分为观察(Show status)和行动(Action) 两个部分。字母S的部分代表观察…

基于springboot+vue的美发门店管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

JS基础之JSON对象

JS基础之JSON对象 目录 JS基础之JSON对象对象转JSON字符串JSON转JS对象 对象转JSON字符串 JSON.stringify(value,replacer,space) value:要转换的JS对象 replacer:(可选)用于过滤和转换结果的函数或数组 space:(可选)指定缩进量 // 创建JS对象 let date {name:"张三…

信息安全工程师 软考回顾(一)

&#x1f433;概述 图源&#xff1a;文心一言 信息安全证书已经考了一年有余&#xff0c;尽管我目前没有从业安全的打算&#xff0c;况且自己的实践能力与从业标准依然有所差距&#xff0c;但其中的内容也值得再温习一遍~&#x1f95d;&#x1f95d; 另外&#xff0c;如果你对…

【蓝桥杯单片机入门记录】静态数码管

目录 一、数码管概述 &#xff08;1&#xff09;认识数码管 &#xff08;2&#xff09;数码管的工作原理 &#xff08;3&#xff09;LED数码管驱动方式-静态显示 二、数码管电路图 三、静态数码管显示例程 &#xff08;1&#xff09;例程1&#xff1a;数码管显示某一位&a…