OpenCV4.8 开发实战系列专栏之 13 - 图像翻转(Image Flip)

大家好,欢迎大家学习OpenCV4.8 开发实战专栏,长期更新,不断分享源码。

专栏代码全部基于C++ 与Python双语演示,专栏答疑群 请联系微信 OpenCVXueTang_Asst

本文关键知识点:图像翻转(Image Flip)

图像翻转的本质像素映射,OpenCV支持三种图像翻转方式

- X轴翻转,flipcode = 0
- Y轴翻转, flipcode = 1
- XY轴翻转, flipcode = -1

相关的API - flip

- src输入参数
- dst 翻转后图像
- flipcode

在图像处理中,翻转(Flip)操作是指沿着一个或多个轴交换图像的像素。OpenCV 提供了一个方便的函数 cv::flip 来实现这一功能。该函数接受三个参数:输入图像 src、输出图像 dst 和翻转代码 flipcode

翻转代码 flipcode 决定了翻转的方式:

  • flipcode = 0:沿着 X 轴翻转(即水平翻转)。
  • flipcode = 1:沿着 Y 轴翻转(即垂直翻转)。
  • flipcode = -1:同时沿着 X 轴和 Y 轴翻转(即先水平翻转再垂直翻转,或者相反,效果相同)。
    在这里插入图片描述

下面是一个使用 OpenCV 的 cv::flip 函数进行图像翻转的示例代码:

#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat src = cv::imread("image.jpg");if (src.empty()) {std::cerr << "Could not open or find the image!\n" << std::endl;return -1;}// 输出图像(翻转后的图像将存储在这里)cv::Mat dst;// 沿着 X 轴翻转cv::flip(src, dst, 0);// 如果你想查看结果,可以保存或显示翻转后的图像// cv::imwrite("flipped_x.jpg", dst);// cv::imshow("Flipped X", dst);// cv::waitKey(0); // 等待按键按下// 沿着 Y 轴翻转// cv::flip(src, dst, 1);// 如果想查看结果,同样可以保存或显示// 同时沿着 X 轴和 Y 轴翻转// cv::flip(src, dst, -1);// 如果想查看结果,同样可以保存或显示// 注意:每次翻转操作后,如果需要再次翻转,应该重新从原始图像 src 开始,或者清除 dst 后再次翻转return 0;
}

在上面的代码中,我们读取了一张名为 “image.jpg” 的图像,并使用 cv::flip 函数沿着 X 轴进行了翻转。翻转后的图像存储在 dst Mat 对象中。你可以通过取消注释相关代码来查看或保存翻转后的图像。

请注意,每次调用 cv::flip 函数时,dst 都会被覆盖为新的翻转后的图像。如果你想保留多个翻转版本的图像,你需要在每次翻转之前创建一个新的 cv::Mat 对象来存储结果,或者将翻转后的图像保存到不同的文件。

此外,OpenCV 的 cv::imshow 函数用于在窗口中显示图像,而 cv::waitKey 函数则用于等待用户按键输入。这些函数在调试和可视化图像处理结果时非常有用。

演示代码

#include<opencv2/opencv.hpp>
#include<iostream>using namespace cv;
using namespace std;int main(int argc, char** argv) {Mat src = imread("D:/vcprojects/images/test.png");if (src.empty()) {printf("could not load image...\n");return -1;}imshow("input", src);Mat dst;// X Flip 倒影flip(src, dst, 0);imshow("x-flip", dst);// Y Flip 镜像flip(src, dst, 1);imshow("y-flip", dst);// XY Flip 对角flip(src, dst, -1);imshow("xy-flip", dst);waitKey(0);return 0;
}

python 代码演示

import cv2 as cv
import numpy as npsrc = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)# X Flip 倒影
dst1 = cv.flip(src, 0);
cv.imshow("x-flip", dst1);# Y Flip 镜像
dst2 = cv.flip(src, 1);
cv.imshow("y-flip", dst2);# XY Flip 对角
dst3 = cv.flip(src, -1);
cv.imshow("xy-flip", dst3);# custom y-flip
h, w, ch = src.shape
dst = np.zeros(src.shape, src.dtype)
for row in range(h):for col in range(w):b, g, r = src[row, col]dst[row, w - col - 1] = [b, g, r]
cv.imshow("custom-y-flip", dst)cv.waitKey(0)
cv.destroyAllWindows()

结束语

学习贵在坚持,学习OpenCV贵在每一天的代码练习,原理跟基本的函数解释,相关知识,后续更新边学边理解,搞技术永远要坚持做长期主义者!我们一起努力!!!

专栏答疑群 请联系微信 OpenCVXueTang_Asst

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

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

相关文章

内网基本概念及知识

参考&#xff1a; 微信公众号&#xff1a;网络安全自修室 1. 内网概述 内网也指局域网&#xff08;Local Area Network&#xff0c;LAN&#xff09;&#xff0c;即在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理&#xff0c;应用软…

【JAVA】使用IDEA创建maven聚合项目

【JAVA】使用IDEA创建maven聚合项目 1.效果图 2.创建父模块项目 2.1删除父模块下面的src目录以及不需要的maven依赖 3创建子模块项目 3.1右击父模块项目选择Module… 3.2创建子模块 3.3删除子模块下不需要的maven依赖 4.子模块创建完成后引入SpringBoot依赖启动项目

wordpress搭建主题可配置json

网站首页展示 在线访问链接 http://dahua.bloggo.chat/ 配置json文件 我使用的是argon主题&#xff0c;你需要先安装好主题&#xff0c;然后可以导入我的json文件一键配置。 需要json界面配置文件的&#xff0c;可以在评论区回复&#xff0c;看见评论我会私发给你。~

员工利用公司资源做自己生意违法吗?怎么预防?答案揭秘:违法!只需这样做!

各位企业大佬们&#xff0c;你的员工有没有心怀不轨&#xff0c;试图利用职务之便&#xff0c;将公司的资源挪作私用&#xff0c;甚至做起自己的生意呢&#xff1f; 老板&#xff1a;这把心酸泪&#xff0c;我都不想说...... 那么&#xff0c;员工利用公司资源做自己生意是否违…

模型再训练软件环境部署说明

什么时候需要看这个文档&#xff1f; 使用exe在windows预测或者训练paddleClas模型时候&#xff0c;本地环境配置的时候。 主机要求 硬件 系统&#xff1a;windows10以上Nvidia显卡数量&#xff1a;1&#xff08;仅支持单卡&#xff09;内存容量&#xff1a;至少32G硬盘容量…

ubuntu系统没有/var/log/messages日志文件解决方法

高版本ubuntu系统默认没有 /var/log/messages&#xff0c;因为在 /etc/rsyslog.d/50-default.conf 文件中&#xff0c;将其注释掉了。如下图 所以需修改该配置文件&#xff0c;将注释放开。 然后重启rsyslog服务即可。 systemctl restart rsyslog.service进入 /var/log/ 目录下…

Activity 通过Bundle与Fragment通信

目录 基础夯实&#xff1a;一、Activity与Fragment的关系二、通信场景三、通信方式1. 通过接口回调2. 通过Bundle3. 其他方式 四、注意事项 效果展示&#xff1a;实现功能&#xff1a;核心代码&#xff1a;MainActivityBlankFragment 基础夯实&#xff1a; Activity与Fragment…

体育活动赛事报名马拉松微信小程序开发

功能描述 体育活动赛事报名马拉松微信小程序&#xff0c;该项目是一个体育活动报名小程序&#xff0c;主要功能有活动报名、扫码签到、签到积分、排行奖励、积分兑换等功能。 用户端&#x1f536;登录&#xff1a;◻️1.微信授权登录 ◻️2.手机号码授权 &#x1f536;首页&am…

管家婆ERP集成金蝶云星空(管家婆主供应链)

源系统成集云目标系统 金蝶云星空介绍 金蝶云星空是金蝶软件&#xff08;中国&#xff09;有限公司研发的新一代战略性企业管理软件&#xff0c;致力于为企业提供端到端的供应链整体解决方案&#xff0c;它可以帮助企业构建敏捷供应链体系&#xff0c;降低供应链成本&a…

信捷 PLC C语言 POU 指示灯交替灭0.5秒亮0.5秒(保持型定时器)

1.在全局变量表中定义2个定时器变量timer_1,timer_2 名称 类型 timer_1 TMR_A_FB False -- False False timer_2 TMR_A_FB False -- False False ot2 BOOL False -- False False ot2表示指示灯 …

一文了解Mamba和选择性状态空间模型 (SSM)

一文了解Mamba和选择性状态空间模型 (SSM 前言SSMSSM简介深度学习中的SSM定义离散化SSM的递归方法SSM梯形法的基本原理离散过程重新整理并推导离散更新公式离散化后的矩阵表示 SSM卷积基本原理分析第一个方程分析第二个方程 Mamba&#xff1a;一种深度学习架构&#xff0c;专注…

SQL注入学习

SQL注入概念及产生原因 当web应用向后台数据库传递SQL语句进行数据库操作时&#xff0c;如果对用户输入的参数没有经过严格的过滤处理&#xff0c;那么攻击者就可以构造特殊的SQL语句&#xff0c;直接输入数据库引擎执行&#xff0c;获取或修改数据库中的数据。

【前端】深入浅出 - TypeScript 的详细讲解

TypeScript 是一种静态类型编程语言&#xff0c;它是 JavaScript 的超集&#xff0c;添加了类型系统和编译时检查。TypeScript 的主要目标是提高大型项目的开发效率和可维护性。本文将详细介绍 TypeScript 的核心概念、语法、类型系统、高级特性以及最佳实践。 1. TypeScript…

【Linux】Linux环境基础开发工具使用(下)

【Linux】Linux环境基础开发工具使用(下) &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;Linux&#x1f34a; &#x1f33c;文章目录&#x1f33c; 4. Linux编辑器--gcc /g的使用 4.1 背景知识 4.2 gcc如何完成 4.2.1 预处理 4.2.2 编…

GPU性能测试,环境搭建笔记,transformers/huggingface_hub改国内源,BertLayer import 报错

代码&#xff0c;以及测试方案使用的是沐神的代码 github的代码&#xff1a; 1. 环境搭建 首先是安装torch 这是我的pytorch版本 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124使用pip指令安装transformers transformers…

PR剪辑视频去重消重色彩叠加特效模板

采用现代设计&#xff0c;灵感来自鲜艳的色彩和动态的灯光效果。包含颜色控制选项&#xff0c;能够轻松地调整效果以匹配您的视频风格。具有图像和视频替换功能。 易用性&#xff1a;适合所有经验水平的用户&#xff0c;包括初学者。 调色板自定义&#xff1a;完全控制颜色以匹…

采购管理软件选择攻略:别忽视这些注意事项

企业在选择采购管理软件时必须谨慎&#xff0c;因为这直接关系到简化采购流程、成本控制、风险降低和效率提升等多个方面。面对内众多的软件选项和竞争目标&#xff0c;采购团队可能难以做出正确的选择。别担心&#xff0c;本文将提供一些建议和注意事项。 采购管理软件的重要性…

关于 npm 更新镜像源问题

npm&#xff08;Node Package Manager&#xff09;&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块&#xff08;包&#xff09;的标准。&#xff09; 查看当前npm版本 npm -v 10.9.0 执行以下命令报错 npm install --registryhttp…

【OceanBase 诊断调优】—— OceanBase 数据库统计信息被禁用,状态为 broken 的原因和解决方法

问题现象 因为人为因素导致部分统计信息函数未安装&#xff0c;自动统计信息触发执行长期失败。重新安装统计信息相关函数后&#xff0c;发现仍然无法正常自动统计信息收集&#xff0c;统计信息状态为 broken。 问题原因 统计信息 JOB 收集失败次数达到 16 次会直接禁用 JOB …

2024腾讯云双十一必抢清单:省钱、省心、省力的购买攻略

一、前言 大家好&#xff0c;我是 Neo&#xff01;一年一度的双十一购物狂欢节又到了&#xff01;在这个特别的日子&#xff0c;腾讯云也推出了超值的优惠活动。最近我正好在做自己的小程序项目&#xff0c;需要用到服务器&#xff0c;特意关注了这次活动&#xff0c;看看有没…