通过transpose和flip实现图像旋转90/180/270度

2023-10-30

在fbc_cv库中,提供了对图像进行任意角度旋转的函数rotate,其实内部也是调用了仿射变换函数warpAffine。如果图像仅是进行90度倍数的旋转,是没有必要用warpAffine函数的。这里通过transpose和flip函数实现对图像进行顺时针90度、180度、270度的旋转。

用fbc::transpose、fbc::flip和cv::transpose、cv::flip实现的结果是完全一致的。

通过fbc_cv库实现代码如下:

#include "test_rotate90.hpp"
#include <opencv2/opencv.hpp>
#include <transpose.hpp>
#include <flip.hpp>

int test_rotate90()
{
	cv::Mat matSrc = cv::imread("E:/GitCode/OpenCV_Test/test_images/1.jpg", 1);
	if (!matSrc.data) {
		std::cout << "read image fail" << std::endl;
		return -1;
	}

	int width = matSrc.cols;
	int height = matSrc.rows;

	fbc::Mat_<uchar, 3> mat1(height, width, matSrc.data);
	fbc::Mat_<uchar, 3> matTranspose(width, height);
	fbc::transpose(mat1, matTranspose);

	// clockwise rotation  90
	fbc::Mat_<uchar, 3> matRotate90(width, height);
	fbc::flip(matTranspose, matRotate90, 1);
	cv::Mat tmp2(width, height, CV_8UC3, matRotate90.data);
	cv::imwrite("E:/GitCode/OpenCV_Test/test_images/rotate_90.jpg", tmp2);

	// clockwise rotation 180
	fbc::Mat_<uchar, 3> matRotate180(height, width);
	fbc::flip(mat1, matRotate180, -1);
	cv::Mat tmp3(height, width, CV_8UC3, matRotate180.data);
	cv::imwrite("E:/GitCode/OpenCV_Test/test_images/rotate_180.jpg", tmp3);

	// clockwise rotation 270
	fbc::Mat_<uchar, 3> matRotate270(width, height);
	fbc::flip(matTranspose, matRotate270, 0);
	cv::Mat tmp4(matTranspose.rows, matTranspose.cols, CV_8UC3, matRotate270.data);
	cv::imwrite("E:/GitCode/OpenCV_Test/test_images/rotate_270.jpg", tmp4);

	return 0;
}

结果图像如下:

原图

顺时针旋转90度 

 顺时针旋转180度


                                                             顺时针旋转270度                                                                


GitHubhttps://github.com/fengbingchun/OpenCV_Test


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过transpose和flip实现图像旋转90/180/270度 的相关文章

  • 是否可以在 PyScript 中使用 OpenCV 模块?

    我想使用 opencv 模块 但无法导入 OpenCV 那么我该如何解决这个问题呢 顺便说一句 Pyodide 支持 OpenCV 示例代码 https i stack imgur com ahwex jpg 尚不支持 OpenCV 此时O
  • 如何在 cv2.VideoWriter 中使用 FPS 参数?

    好的 所以我正在制作视频 我想确切地知道如何使用 FPS 参数 它是一个浮点数 所以我假设这是我想要的每帧之间的间隔 你能给个例子吗 我只想知道视频会如何随着 FPS 参数值的变化而变化 因为我制作的视频现在太快了 谢谢 确实只是这样 fr
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域
  • OpenCV 2.2 和多 CPU - opencv_haartraining.exe 是多线程的吗?

    我在 VS 2010 上构建了 OpenCV 2 2 启用了 TBB 3 支持 我确保所有项目都有正确的 tbb lib 目录 并将 tbb lib 列为依赖项 通过隐藏 tbb dll 进行验证 果然 haartraining exe 抱
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • iphone opencv - 模板匹配

    我已经在我的 iphone 项目中实现了这个 OpenCV 构建 http aptogo co uk 2011 09 opencv framework for ios http aptogo co uk 2011 09 opencv fra
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • 开放简历fisherfaces

    我有这个问题 当我使用 vs2010 调试 opencv 2 4 0 facetec demo c 运行时 程序出现此错误 OpenCV错误 未知函数中图像步长错误 矩阵不连续 因此其行数无法更改 文件 src opencv modul e
  • 查找具有不同强度/亮度的相似图像

    假设我有如下图像 我可以选择什么来比较两个图像之间的相似度 显然它们是相同的图像 只是亮度不同 我找不到任何可行的方法 目前我最好的选择是训练 cnn 或自动编码器并比较输出的特征向量 但这似乎有点矫枉过正 任何提示将不胜感激 相当强大的工
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • opencv_contrib编译错误:类没有成员

    我必须实现 SURF 算法来进行图像拼接 我在使用列出的库时遇到了问题here https stackoverflow com questions 33560251 opencv 3 0 0 ubuntu 14 04 nonfree non
  • 找到 4 个特定的角像素并将它们与扭曲透视一起使用

    我正在使用 OpenCV 我想知道如何构建一个简单版本的透视变换程序 我有一张平行四边形的图像 它的每个角都由具有特定颜色的像素组成 该像素在图像中没有其他位置 我想遍历所有像素并找到这 4 个像素 然后我想将它们用作新图像中的角点 以扭曲
  • 在Python中从整个图像中检测表格部分

    我有一张尺寸为 3500x5000 的图像 现在我只想检测整个图像中的表格部分 如果不能直接进行 OCR 处理 则对其进行裁剪和旋转 经过所有搜索后 我想到了使用裁剪图像中的每个单元格的想法https medium com coinmonk
  • Opencv 对象检测:ORB GPU 检测器和 SURF GPU 描述符提取器

    我只是做了一个小实验来尝试不同的检测器 描述符组合 我的代码使用 ORB GPU 检测器来检测特征 并使用 SURF GPU 描述符来计算描述符 我使用 BruteForceMatcher GPU 来匹配描述符 并使用 knnMatch 方
  • 如何用OpenCV解决图像处理相机IO延迟

    我有一个 OpenCV 程序 其工作原理如下 VideoCapture cap 0 Mat frame while true cap gt gt frame myprocess frame 问题是如果myprocess耗时较长 超过相机的I
  • Alpha 混合可消除图像中的接缝

    我缝合了两张图像 但在最终图像中存在可见的接缝 我正在尝试使用阿尔法混合去除那条接缝 我知道 Alpha 混合是使用cvAddweight 函数 但在此函数参数是两个图像 alpha beta gamma和目的地 我正在服用gamma 0
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • Haar级联正例图像大小调整

    我正在迈出第一步 为自定义对象识别创建 haar 级联 我花了时间获取大量数据并编写了一些预处理脚本以将视频转换为帧 我的下一步是裁剪感兴趣的对象 以创建一些积极的训练示例 我有几个问题 我确实在网上寻找答案 我有点困惑 我读到我应该致力于
  • OpenCV 地板分割检测

    我正在研究一种检测图像中地板的方法 我试图通过将图像缩小为颜色区域然后假设最大区域是地板来实现此目的 我们对机器人的运行环境做出一些相当广泛的假设 我正在寻找一些关于适合这个问题的算法的建议 任何帮助将不胜感激 编辑 具体来说 我正在寻找一
  • 使用 OpenCV 从轮廓获取掩模

    我想从我通过 cv findContours 计算的轮廓 它只存在 1 个轮廓 获取图像掩模 然而 虽然我的轮廓变量不为空 但我无法使用 cv drawContours 检索图像蒙版 我的目标图像始终为空 这是我的代码 img mosaic

随机推荐

  • 星星之火-33: 复指数信号与IQ双路载波调制

    复指数的应用 IQ双路载波调制 IQ双路载波调制是复指数在现代通信系统中最广泛的应用之一 复指数信号的最重要的意义上在于 提供了一种简便的方法 虚指数运算 在不改变载波信号的频率情况下 实现对已调信号的幅度和相位的双重控制 目录 1 IQ双
  • vue2.x,3.x安装使用cesium(不需配置文件,简单有效)

    踩坑之路 博主经多次踩坑之后 顿悟 初次接触cesium 去网上搜了很多vue中安装cesium的教程 大多方法都是使用npm i cesium save 然后配置文件vue config js 或者直接安装vue add vue cli
  • lvalue required as increment operand

    include
  • TreeViewer阶段性学习笔记1

    公司接到了一个新项目 需要用到Eclipse插件开发 虽然Eclipse插件开发不是什么新技术了 但对项目组的所有成员来说还是一个新课题 因为都只是用Eclipse来开发 没有人做过插件开发 新的程序员就是要随时接受技术挑战 我能 只不过是
  • 省市区地区编码获取

    获取国家统计局省市区代码 在之前作者代码基础上进行了修改 1 解决了重复报错问题 2 只获取三级地址 3 获取2022年的 具体看代码 注意看Readme md https gitee com ctcncom crawler blob ma
  • 爬取新浪微博(搜索含关键词微博及其评论)

    import csv import requests import json import re import jieba import matplotlib pyplot as plt from wordcloud import Word
  • 关于vue播放flv,m3u8视频流(监控)的方法

    前文 随着前端大屏页面的逐渐壮大 客户的需求也越来越多 大屏上面展示的事物也越来越丰 富 其中实时播放监控的需求逐步增加 视频流格式也是有很多种 用到最多的 flv m3u8 一 JessibucaPlayer插件用来播放flv流 1 首先
  • 有没有工业软件发展历史方面的书籍?讲公司、技术的发展历程?

    好像没有吧 况且工业软件的发展在智能制造的时代已经发生根本性的转变 传统的工业软件逐渐退出历史舞台 由新兴的工业软件所取代 即工业APPs 我们现在讲的工业软件通常意义就是说的工业APP 是工业互联网的重要组成部分 在实现人 机 物全面互联
  • 【CSS3高级应用】

    CSS3高级应用 一 页面中的多媒体嵌入 二 CSS3中过渡效果 transition 三 CSS3中变形效果 transform 四 CSS3的动画效果 animation 五 CSS3的滤镜效果 Filters 六 CSS3精灵技术 s
  • Field injection is not recommended 依赖注入方式

    参考文章 http vojtechruzicka com field dependency injection considered harmful 首先对于还不熟悉 Autowired的同学当然也包括我先去看看它到底有什么作用 自动装配
  • VLCDotNet在C#中的使用说明

    摸索了半天终于搞定了 记录一下 首先到开源网站下载压缩包 https github com ZeBobo5 Vlc DotNet releases 下载解压有四个类库工程和两个实例项目 Vlc DotNet Core Interops Vl
  • 66.加一[Leetcode 力扣 Java&C完整解答]

    为什么我要给出完整解答 因为要搜索个题目的解答 很多都偷懒只给个方法的实现 结果跑都跑不起来 于是我就决定 每一题 都给出Java C两种完整的解答 直接就可以运行 Debug Leetcode题目来源 66 加一 给定一个由整数组成的非空
  • idea中的项目没有蓝色小方块

    将idea右侧的加号 加上该项目的pom xml 刷新即可 浪费了哥十几分钟时间
  • 如何提交代码到github仓库(2022最新最详细)

    一 github注册及创建仓库 首先得先注册一个github账号 如何注册在这就不多陈述 如果注册过程中有任何疑问可以去网上查阅资料 也可以私聊我 2 注册好github账号后 来到如图画面 点击new建立一个github仓库 设置好后点击
  • 关于错误 The type or namespace name `Vuforia' could not be found. Are you missing an assembly reference?

    今天想用unity打包一个AR的demo到手机里试试截屏功能 在客户端运行都好好的 一打包就出现了标题里面的问题 不仅如此 还有一连带的 意思就是找不到你using的这些命名空间 我百度都找遍了 还是未果 我就开始在工程里寻找哪里有这些命名
  • 小程序顶部返回按钮

    一 小程序顶部返回按 直接只用uni navigateTo 相当于再压一次栈 同时在onBackPress中不能直接调用uni navigateBack 否则会无限循环 导致返回无法生效 onBackPress options if opt
  • Windows下批处理文件(.bat)的使用

    批处理 Batch 就是进行批量的处理 英文译文BATCH 批处理文件后缀BAT就取的前三个字母 通常被认为是一种简化的脚本语言 它应用于DOS和Windows系统中 批处理文件是扩展名为 bat或 cmd的文本文件 包含一条或多条命令 由
  • idea快捷键设置(Idea常用快捷键大全)

    目录 友情提醒 第一章 IDEA常用快捷键 1 1 快捷键 查找 提示类 1 2 快捷键 修改代码类 1 3 快捷键 光标移动类 第二章 Idea如何修改快捷键 2 1 已知快捷键 通过搜索快捷键查找 2 2 已知快捷键含义 通过输入快捷键
  • SpringBoot 如何实现多文件的上传和下载

    在前面的文章中 我们介绍了如何在Spring Boot中实现单个文件的上传和下载 但是 有时候我们需要实现多个文件的上传和批量下载 本文将介绍如何在Spring Boot中实现多文件上传和批量下载的功能 多文件上传 在Spring Boot
  • 通过transpose和flip实现图像旋转90/180/270度

    在fbc cv库中 提供了对图像进行任意角度旋转的函数rotate 其实内部也是调用了仿射变换函数warpAffine 如果图像仅是进行90度倍数的旋转 是没有必要用warpAffine函数的 这里通过transpose和flip函数实现对