Opencv基础用法学习2

案例1:调整图片颜色

在opencv中的读图方式是BGR,常见的读图方式是RGB

// opencv 调整颜色
#include "opencv2/opencv.hpp"
#include <iostream>int main()
{// 读取图片cv::Mat src = cv::imread("./media/dog.jpg");// BGR -> Graycv::Mat gray;// 三个参数分别是输入图像、输出图像、转换方式cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);// BGR -> HSV,Hue(色调)、Saturation(饱和度)、Value(明度)cv::Mat hsv;cv::cvtColor(src, hsv, cv::COLOR_BGR2HSV);// BGR -> RGBcv::Mat rgb;cv::cvtColor(src, rgb, cv::COLOR_BGR2RGB);// 保存cv::imwrite("./output/1.gray.jpg", gray);cv::imwrite("./output/1.hsv.jpg", hsv);cv::imwrite("./output/1.rgb.jpg", rgb);return 0;
}

案例2:图像滤波处理

// opencv 图像滤波
#include "opencv2/opencv.hpp"
#include <iostream>int main()
{// 读取图片cv::Mat src = cv::imread("./media/dog.jpg");// 高斯模糊cv::Mat blur;// 三个参数分别是输入图像、输出图像、卷积核大小cv::GaussianBlur(src, blur, cv::Size(7, 7), 0);// 膨胀cv::Mat dilate;// 三个参数分别是输入图像、输出图像、卷积核大小cv::dilate(src, dilate, cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5)));// 腐蚀cv::Mat erode;// 三个参数分别是输入图像、输出图像、卷积核大小cv::erode(src, erode, cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5)));// 保存cv::imwrite("./output/2.blur.jpg", blur);cv::imwrite("./output/2.dilate.jpg", dilate);cv::imwrite("./output/2.erode.jpg", erode);return 0;
}

案例3:图片形状调整及拼接翻转操作

// 形状调整
#include "opencv2/opencv.hpp"
#include <iostream>
#include <vector>int main()
{// 读取图像cv::Mat cat_img = cv::imread("./media/cat.jpg");// ======== resize ========cv::Mat cat_resize;// 三个参数分别是输入图像、输出图像、输出图像大小cv::resize(cat_img, cat_resize, cv::Size(320, 240));// 保存cv::imwrite("./output/3.cat_resize.jpg", cat_resize);// ======== copy ========cv::Mat copy;cat_img.copyTo(copy);cv::imwrite("./output/3.copy.jpg", copy);// ======== ROI裁剪 ========cv::Rect rect(100, 100, 200, 100); // x, y, width, heightcv::Mat roi = cat_img(rect);cv::imwrite("./output/3.roi.jpg", roi);// ======== 拼接 ========cv::Mat dog_img = cv::imread("./media/dog.jpg");cv::Mat dog_resize;cv::resize(dog_img, dog_resize, cv::Size(320, 240));// 水平拼接,需要保证两张图片的高度(rows)一致cv::Mat hconcat_img;cv::hconcat(cat_resize, dog_resize, hconcat_img);cv::imwrite("./output/3.hconcat.jpg", hconcat_img);// 或者使用vector方式std::vector<cv::Mat> imgs{cat_resize, dog_resize, cat_resize, dog_resize};cv::Mat hconcat_img2;cv::hconcat(imgs, hconcat_img2);cv::imwrite("./output/3.hconcat2.jpg", hconcat_img2);// 数组方式cv::Mat imgs_arr[] = {dog_resize, cat_resize, dog_resize, cat_resize};cv::Mat hconcat_img3;cv::hconcat(imgs_arr, 4, hconcat_img3); // 4是数组长度cv::imwrite("./output/3.hconcat3.jpg", hconcat_img3);// 垂直拼接,需要保证两张图片的宽度(cols)一致cv::Mat vconcat_img;cv::vconcat(cat_resize, dog_resize, vconcat_img);cv::imwrite("./output/3.vconcat.jpg", vconcat_img);// ======== 翻转 ========cv::Mat flip;// 三个参数分别是输入图像、输出图像、翻转方向cv::flip(cat_img, flip, 1); // 1表示水平翻转,0表示垂直翻转,-1表示水平垂直翻转cv::imwrite("./output/3.flip.jpg", flip);// ======== 旋转 ========cv::Mat rotate;// 三个参数分别是输入图像、输出图像、旋转角度cv::rotate(cat_img, rotate, cv::ROTATE_90_CLOCKWISE); // 顺时针旋转90度cv::imwrite("./output/3.rotate.jpg", rotate);return 0;
}

案例4:绘制文字和图形

// 绘制文字和图形
#include "opencv2/opencv.hpp"
#include <iostream>
#include <vector>int main()
{// 创建一个黑色图像,参数分别是图像大小、图像类型,CV_8UC3表示8位无符号整数,3通道cv::Mat image = cv::Mat::zeros(cv::Size(600, 600), CV_8UC3);// 绘制直线,参数分别是图像、起点、终点、颜色、线宽、线型cv::line(image, cv::Point(50, 50), cv::Point(350, 250), cv::Scalar(0, 0, 255), 2, cv::LINE_AA);// 绘制矩形,参数分别是图像、左上角、右下角、颜色、线宽、线型cv::rectangle(image, cv::Point(50, 50), cv::Point(350, 250), cv::Scalar(0, 255, 0), 2, cv::LINE_AA);// 绘制圆形,参数分别是图像、圆心、半径、颜色、线宽、线型cv::circle(image, cv::Point(200, 150), 100, cv::Scalar(255, 0, 0), 2, cv::LINE_AA);// 实心cv::circle(image, cv::Point(200, 150), 50, cv::Scalar(255, 0, 0), -1, cv::LINE_AA);// // ================== 多边形 ==================// cv::Point points[2][4]; // 定义两个多边形的顶点数组// // 第一个多边形的顶点// points[0][0] = cv::Point(100, 115);// points[0][1] = cv::Point(255, 135);// points[0][2] = cv::Point(140, 365);// points[0][3] = cv::Point(100, 300);// // 第二个多边形的顶点// points[1][0] = cv::Point(300, 315);// points[1][1] = cv::Point(555, 335);// points[1][2] = cv::Point(340, 565);// points[1][3] = cv::Point(300, 500);// // ppt[] 要同时添加两个多边形顶点数组的地址)// const cv::Point *pts_v[] = {points[0], points[1]};// // npts_v[]要定义每个多边形的顶点数// int npts_v[] = {4, 4};// // 绘制多边形,参数分别是图像、顶点数组、顶点数、曲线数量、是否闭合、颜色、线宽、线型// cv::polylines(image, pts_v, npts_v, 2, true, cv::Scalar(255, 0, 255), 2, 8, 0);// ================== 使用vector绘制多边形 ==================std::vector<cv::Point> points_v;// 随机生成5个点for (int i = 0; i < 5; i++){points_v.push_back(cv::Point(rand() % 600, rand() % 600));}// 绘制多边形,参数分别是图像、顶点容器、是否闭合、颜色、线宽、线型cv::polylines(image, points_v, true, cv::Scalar(255, 0, 0), 2, 8, 0);// ================== 绘制文字 ==================// 参数分别是图像、文字、文字位置、字体、字体大小、颜色、线宽、线型cv::putText(image, "Hello World!", cv::Point(400, 50), cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(255, 255, 255), 2, 8, 0);// 保存cv::imwrite("./output/4.drawing.jpg", image);return 0;
}

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

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

相关文章

计算机网络 网络安全

网络安全 网络安全问题概述 计算机网络面临的女全性威胁 计算机网络的通信而临两大类威胁&#xff0c;即被动攻击和主动攻击 被动攻击是指攻击者从网络上窃听他人的通信内容。通常把这类攻击称为截获。在被动攻击中&#xff0c;攻击者只是观察和分析某一个协议数据单元 PDU…

Docker-Dockerfile

DockerFile(用于构建镜像的文本) 常用的保留字 FROM #基础镜像,基于那个镜像 MAINTAINER #镜像的维护者 #构建容器需要执行的命令(RUN)支持两种格式 shell格式&#xff1a;RUN yum -y install vim #exec格式:RUN["./test.sh", "dev", "offile&qu…

4、Redis高并发分布式锁实战

引言 在分布式系统中&#xff0c;保证数据的一致性和避免竞争条件是至关重要的。分布式锁是一种常用的机制&#xff0c;而Redis作为一款高性能的内存数据库&#xff0c;提供了简单而强大的分布式锁方案。本文将深入探讨如何利用Redis高并发分布式锁来解决分布式系统中的并发控…

Armv8-R AArch32 architecture概念学习

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网文档为准。阅读该文章&#xff0c;可以先查看AArch64 Exception Model学习&…

idea 安装免费Ai工具 codeium

目录 概述 ide安装 使用 chat问答 自动写代码 除此外小功能 概述 这已经是我目前用的最好免费的Ai工具了&#xff0c;当然你要是有钱最好还是用点花钱的&#xff0c;比如copilot&#xff0c;他可以在idea全家桶包括vs&#xff0c;还有c/c的vs上运行&#xff0c;还贼强&am…

C语言如何引⽤⼀个已经定义过的外部变量?

一、问题 如何引⽤⼀个已经定义过的外部变量&#xff1f; 二、解答 如果在⼀个⽂件中定义了⼀个外部变量 a&#xff0c;在另⼀个程序⽂件中再定义⼀个外部变量 a&#xff0c;就会产⽣⼀个“重复定义”的错误&#xff0c;那么怎样引⽤⼰经定义的外部变量呢&#xff1f; 引⽤被…

CentOS下用rpm安装软件时报错error: Failed dependencies

在CentOS下用rpm安装软件时会报如下错误&#xff1a; 1、安装时提示&#xff1a; [rootdb software]# rpm -ivh ksh-20120801-254.el8.x86_64.rpm warning: ksh-20120801-254.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY error: Failed depende…

力扣白嫖日记(sql)

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 586.订单最多的客户 表&#xff1a;Orders 列名类型order_numberintcustomer_numberint 查找下了最多订单的…

机器人持续学习基准LIBERO系列7——计算并可视化点云

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo机器人持续学习基准LIBERO系列5——…

用Perl采集美容化妆目标网站做一个深度调研

在Perl中编写爬虫程序涉及到几个关键步骤&#xff0c;包括使用相关的库来发送HTTP请求和解析HTML内容。首先我们要了解Perl爬虫程序编程得几大步骤&#xff1a;安装必要的Perl模块—创建一个用户代理—发送HTTP请求—解析响应内容—提取所需数据—存储或进一步处理数据。所以说…

【ChatGPT VS baidu】:提升程序员开发效率的智能助手

在现代软件开发中&#xff0c;ChatGPT&#xff08;Chat Generative Pre-trained Transformer&#xff09;作为一种基于人工智能的对话模型&#xff0c;为程序员带来了许多便利和效率提升。ChatGPT 结合了先进的自然语言处理和生成技术&#xff0c;能够理解和生成人类语言&#…

springcloud Alibaba中gateway和sentinel联合使用

看到这个文章相信你有一定的sentinel和gateway基础了吧。 官网的gateway和sentinel联合使用有些过时了&#xff0c;于是有了这个哈哈&#xff0c;给你看看官网的&#xff1a; 才sentinel1.6&#xff0c;现在都几了啊&#xff0c;所以有些过时。 下面开始讲解&#xff1a; 首先…

虚拟服务器的监控和管理

IT 网络中虚拟环境的出现给 IT 管理员带来了一些挑战&#xff0c;虚拟环境降低了管理硬件和软件的成本和复杂性&#xff0c;同时&#xff0c;他们通常需要 IT 管理员管理更多的空间&#xff0c;以确保完全可见和快速解决问题。 虚拟服务器在现代 IT 基础架构中越来越普遍&…

LabVIEW模拟荧光显微管滑动实验

LabVIEW模拟荧光显微管滑动实验 在现代生物医学研究中&#xff0c;对微观生物过程的精准模拟和观察至关重要。本案例展示了如何利用LabVIEW软件和专业硬件平台&#xff0c;创新地模拟荧光显微管在滑动实验中的动态行为&#xff0c;这一过程不仅提升了实验效率&#xff0c;还为…

基于冯·诺依曼架构能否实现有主动思想的AI

冯诺依曼架构是一种计算机体系结构&#xff0c;由冯诺依曼在20世纪40年代设计并提出。它是现代计算机设计的基础&#xff0c;并广泛应用于当前的计算机系统。冯诺依曼架构的核心思想是将程序和数据存储在同一个存储器中&#xff0c;并通过控制单元、算术逻辑单元、存储器和输入…

pycharm学生认证免费使用专业版

进入pycharm官网Monthly and yearly plans with JetBrains Toolboxhttps://www.jetbrains.com/store/?fromMenu#discounts ​​​ 按照要求填写&#xff0c;但是如果遇到这个提示&#xff0c;恭喜你&#xff0c;你的学校获得了美国商务部认证。 ​ 遇到这个不要慌&#…

美创科技助力江苏有线通过DSMM二级认证

近日&#xff0c;经中国信通院泰尔认证中心评审&#xff0c;美创科技助力江苏省广电有线信息网络股份有限公司&#xff08;以下简称“江苏有线”&#xff09;顺利通过DSMM数据安全能力成熟度二级认证&#xff0c;成为广电行业内首家获得二级认证的单位&#xff01; 背景概述 江…

什么是防火墙?

目录 什么是防火墙&#xff0c;为什么需要防火墙&#xff1f;防火墙与交换机、路由器对比防火墙和路由器实现安全控制的区别防火墙的发展史1989年至1994年1995年至2004年2005年至今 什么是防火墙&#xff0c;为什么需要防火墙&#xff1f; “防火墙”一词起源于建筑领域&#x…

ChatGPT 和 文心一言 的优缺点及需求和使用场景

ChatGPT和文心一言是两种不同的自然语言生成模型&#xff0c;它们有各自的优点和缺点。 ChatGPT&#xff08;Generative Pre-trained Transformer&#xff09;是由OpenAI开发的生成式AI模型&#xff0c;它在庞大的文本数据集上进行了预训练&#xff0c;并可以根据输入生成具有上…

GitHub 异常 - 无法连接22端口 Connection timed out

GitHub 异常 - 无法连接22端口 Connection timed out 问题描述 错误信息&#xff1a; 今天突然用ssh方式 pull GitHub的项目报:ssh: connect to host xx.xx.xx.xx port 22: Connection timed out 表明 SSH 连接在尝试通过 22 端口连接到远程服务器时超时。这可能是由于网络环…