7.7opencv中(基于C++) 翻转图像

基本概念

在OpenCV中,翻转图像指的是沿着一个或多个轴翻转图像。OpenCV提供了一个函数 flip 来完成这个任务。这个函数可以沿着水平轴、垂直轴或者同时沿着水平和垂直轴翻转图像。

函数原型

void flip(InputArray src,OutputArray dst,int flipCode
);参数说明
•src:输入图像,可以是任意类型的单通道或多通道图像。
•dst:翻转后的输出图像,将与输入图像具有相同的类型和大小。
•flipCode:指定翻转的方式: •flipCode > 0:沿y轴翻转(水平翻转)。•flipCode == 0:沿x轴翻转(垂直翻转)。•flipCode < 0:沿中心翻转(同时沿x轴和y轴翻转)。

示例代码1

下面是一个使用OpenCV C++实现图像翻转的示例代码:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;void flipImage(const Mat &src, Mat &dst, int flipCode) {flip(src, dst, flipCode);
}int main(int argc, char** argv) 
{/*if (argc != 2){cout << "Usage: ./FlipImage <Image Path>" << endl;return -1;}*/// 加载图像Mat img = imread("023.jpeg");if (!img.data){cout << "Error opening image" << endl;return -1;}// 初始化输出矩阵Mat flipped_horizontal, flipped_vertical, flipped_center;// 水平翻转flipImage(img, flipped_horizontal, 1);// 垂直翻转flipImage(img, flipped_vertical, 0);// 中心翻转flipImage(img, flipped_center, -1);// 显示结果namedWindow("Original Image", WINDOW_NORMAL);imshow("Original Image", img);namedWindow("Flipped Horizontally", WINDOW_NORMAL);imshow("Flipped Horizontally", flipped_horizontal);namedWindow("Flipped Vertically", WINDOW_NORMAL);imshow("Flipped Vertically", flipped_vertical);namedWindow("Flipped Center", WINDOW_NORMAL);imshow("Flipped Center", flipped_center);waitKey(0);destroyAllWindows();return 0;
}代码解释
1. 加载图像:使用 imread 函数加载图像。
2. 初始化输出矩阵:创建新的矩阵来存储翻转后的图像。
3. 水平翻转:使用 flip 函数将图像沿水平轴翻转。
4. 垂直翻转:使用 flip 函数将图像沿垂直轴翻转。
5. 中心翻转:使用 flip 函数将图像沿中心翻转。
6. 显示结果:使用 imshow 函数显示原始图像以及翻转后的图像。示例运行结果
当你运行上述程序时,将会看到以下几个窗口:
•Original Image:原始图像。
•Flipped Horizontally:沿水平轴翻转的图像。
•Flipped Vertically:沿垂直轴翻转的图像。
•Flipped Center:沿中心翻转的图像。注意事项
•数据类型:确保输出图像的数据类型与输入图像相同。
•翻转方向:正确选择 flipCode 参数,以实现所需的翻转效果。
•内存管理:确保释放不再使用的图像资源,避免内存泄漏。进一步的优化
如果你需要进行大量的图像翻转操作,可以考虑将翻转操作封装成一个函数或类,以便于重用代码。此外,你还可以考虑使用多线程来加速图像处理过程,特别是在处理大量图像时。其他相关函数
除了 flip 函数外,OpenCV还提供了其他一些图像变换函数,例如 warpAffine 和 warpPerspective,这些函数可以实现更复杂的图像变换操作。实际应用
图像翻转在许多实际应用中都非常有用,例如:
•数据增强:在训练深度学习模型时,可以通过对训练图像进行水平或垂直翻转来增加训练数据的多样性。
•视频处理:在视频编辑中,可以使用翻转功能来调整视频帧的方向。
•图像处理:在图像处理中,翻转操作可以用来纠正拍摄时相机的倾斜或旋转。通过这些示例和详细解释,你应该能够理解如何在OpenCV中使用C++实现图像的翻转。

运行结果1

示例代码2

下面是一个完整的示例代码:

#include <opencv2/opencv.hpp> // 包含OpenCV的所有模块
#include <iostream>int main(int argc, char** argv)
{/*if (argc != 2){std::cout << "Usage: " << argv[0] << " <Image_Path>" << std::endl;return -1;}*/// 读取图像文件cv::Mat src = cv::imread("056.jpeg", cv::IMREAD_COLOR);if (!src.data){std::cout << "Error: Image cannot be loaded!" << std::endl;return -1;}// 创建目标图像cv::Mat flipped;// 水平翻转图像cv::flip(src, flipped, 1); // 1表示水平翻转cv::namedWindow("Original Image", cv::WINDOW_NORMAL);cv::imshow("Original Image", src);cv::namedWindow("Flipped Horizontally", cv::WINDOW_NORMAL);cv::imshow("Flipped Horizontally", flipped);cv::waitKey(0);// 清空flipped以便再次使用flipped.release();// 垂直翻转图像cv::flip(src, flipped, 0); // 0表示垂直翻转cv::namedWindow("Flipped Vertically", cv::WINDOW_NORMAL);cv::imshow("Flipped Vertically", flipped);cv::waitKey(0);// 清空flipped以便再次使用flipped.release();// 对角线翻转图像cv::flip(src, flipped, -1); // -1表示沿着图像中心点翻转cv::namedWindow("Flipped Diagonally", cv::WINDOW_NORMAL);cv::imshow("Flipped Diagonally", flipped);cv::waitKey(0);return 0;
}

运行结果2

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

半导体行业跨国文件传输解决方案

在数字化浪潮席卷全球的今天&#xff0c;半导体行业无疑是科技创新的先锋。随着对数据传输需求的激增&#xff0c;传统的文件传输协议FTP在处理半导体行业庞大的文件量和复杂的文件结构时显得捉襟见肘。尤其是在跨国文件传输场景中&#xff0c;传统方法已经难以跟上行业的发展步…

【论文阅读】Benchmarking Retrieval-Augmented Generation for Medicine

论文&#xff1a;https://arxiv.org/abs/2402.13178 代码&#xff1a; GitHub - Teddy-XiongGZ/MIRAGE: Official repository of the MIRAGE benchmark GitHub - Teddy-XiongGZ/MedRAG: Code for the MedRAG toolkit 研究背景&#xff1a; 系统地评估医用rag QA系统&#xff0…

空洞骑士 Hollow Knight 攻略

文章目录 Part.I IntroductionPart.II 攻略Chap.I 地图Chap.II 护符Chap.III BOSSChap.IV 魔法 Reference Part.I Introduction 《空洞骑士》是独立团队 Team Cherry 开发的一款 2D 类银河恶魔城动作冒险游戏。本文记录笔者玩此游戏所积累的一些经验。 「在《空洞骑士》中打造…

MATLAB-最小二乘辨识

一、最小二乘法&#xff08;Least Squares Method&#xff09;一般步骤 非线性最小二乘法是一种用于优化非线性系统模型的数学方法&#xff0c;它通过迭代过程来逐步逼近最优解。这种方法在处理非线性系统时非常有用&#xff0c;因为它允许模型在数据拟合过程中具有更灵活的形…

【Python报错已解决】ModuleNotFoundError: No module named ‘sklearn‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3566移植案例(上)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统STM32F407芯片移植案…

如何配置 Apache 反向代理服务器 ?

将 Apache 配置为反向代理意味着将 Apache 设置为侦听和引导 web 流量到后端服务器或服务。这有助于管理和平衡服务器上的负载&#xff0c;提高安全性&#xff0c;并使您的 web 服务更高效。您还可以将其设置为监听标准 HTTP 和 HTTPS 端口上的请求&#xff0c;并将其重定向到运…

无人机维修保养一对一教学技术详解

随着无人机技术的日益普及和应用的广泛深入&#xff0c;无人机的维修保养成为确保飞行安全、延长使用寿命的关键环节。为了培养专业的无人机维护人才&#xff0c;一对一教学成为了一种高效、针对性的培训方式。以下将详细解析无人机维修保养一对一教学的技术要点&#xff0c;涵…

深入 mysql,掌握一对一、一对多、多对多表设计、查询及级联操作

数据库表的基本概念与关系 数据库通常包含多个表&#xff0c;每个表存储特定类型的信息。例如&#xff1a; 学生表&#xff1a;存储学生信息。老师表&#xff1a;存储老师信息。班级表&#xff1a;存储班级信息。 这些表通过各种关系连接&#xff0c;形成一个结构化的数据管…

基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 支持向量机&#xff08;SVM&#xff09; 4.2 WOA 4.3 WOA优化SVM参数 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核…

零工市场小程序:保障灵活就业

截止2024年高校毕业生达到1179万&#xff0c;在今年的经济情况下&#xff0c;就业市场就面临着比较大的压力&#xff0c;许多毕业生面临一时之间难以找到合适的工作的问题&#xff0c;那么求职者就会需要一份临时的工作来得到报酬&#xff0c;面对传统的找零工方式&#xff0c;…

用ASR PRO离线语音芯片和月饼盒做一个会跑会跳会说话的机器狗

中秋节刚过&#xff0c;大家月饼盒应该还有&#xff0c;不要扔&#xff0c;可以做点小玩意。 机器狗的创意来自B站石桥北的视频&#xff0c;他使用了一块ESP32芯片和打印件加四个舵机实现&#xff0c;应该说是比较复杂的&#xff0c;需要有3D打印机打印外壳&#xff0c;还得会…

Qt串口助手开发:基于多线程moveToThread方法串口通信工具

介绍了一个基于Qt框架开发的简易串口助手&#xff0c;满足粉丝的需求。该项目展示了如何利用Qt的moveToThread方法实现多线程串口通信&#xff0c;确保数据接收和发送功能的流畅性。项目中的核心类包括SerialWorker类和MainWindow类&#xff0c;分别负责串口操作和用户界面交互…

【数据可视化】Arcgis api4.x 热力图、时间动态热力图、timeSlider时间滑块控件应用 (超详细、附免费教学数据、收藏!)

1.效果 目录 1.效果 2.安装配置 3.热力图 4.TimeSlider滑块应用 4.1 时间滑块控件 4.2 添加控件 5.时间动态热力图 2.安装配置 这里不教大家如何在前端框架使用arcgis api。不过npm安装、css如何引入、教学数据存放与图层加载的教程&#xff0c;可以浏览我之前发的一篇文…

高效财税自动化软件的特点与优势

随着企业管理信息系统和互联网的不断发展&#xff0c;企业对财务管理提出了更高的要求。为有效助力企业规范财务工作&#xff0c;提高工作效率和准确性&#xff0c;实现信息化管理&#xff0c;越来越多的企业选择引入RPA等高效财税自动化软件。本文金智维将围绕RPA高效财税自动…

LeetCode 2332.坐上公交的最晚时间 (双指针 + 贪心)

给你一个下标从 0 开始长度为 n 的整数数组 buses &#xff0c;其中 buses[i] 表示第 i 辆公交车的出发时间。同时给你一个下标从 0 开始长度为 m 的整数数组 passengers &#xff0c;其中 passengers[j] 表示第 j 位乘客的到达时间。所有公交车出发的时间互不相同&#xff0c;…

基于SpringCloud的能源管理系统-能源管理平台源码-双碳平台源码-能管管理系统源码

一、介绍 基于SpringCloud的能管管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码 二、软件架构 二、功能介绍 三、数字大屏展示 四、数据采集原理 五、软件截图

Mycat搭建读写分离

启动Mycat 进入 /mycat/conf/datasources目录下&#xff0c;修改prototypeDs.datasource.json文件 去mycat/bin目录用启动mycat ./mycat start (关闭mycat ./mycat stop)连接mycat 默认端口8066 用户名root 密码123456 注意&#xff1a;这里ip设为null表示任何ip都可以访问…

【设计模式-组合】

**Composite Pattern&#xff08;组合模式&#xff09;**是一种结构型设计模式&#xff0c;旨在将对象组合成树形结构&#xff0c;以表示“部分-整体”的层次结构。这种模式允许客户端以统一的方式处理单个对象和对象集合&#xff0c;从而简化了树形结构的处理。 核心思想 组…

LLM应用实战: 文档问答系统Kotaemon-1. 简介及部署实践

1.背景 本qiang~这两周关注到一个很火的开源文档问答系统Kotaemon&#xff0c;从8月28日至今短短两周时间&#xff0c;github星标迅猛增长10K&#xff0c;因此计划深挖一下其中的原理及奥秘。 本篇主要是Kotaemon的简介信息&#xff0c;涉及到主要特点&#xff0c;与传统文档…