如何用OpenCV和C语言实现图片旋转功能?

2026-04-19 04:051阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1245个文字,预计阅读时间需要5分钟。

如何用OpenCV和C语言实现图片旋转功能?

图片旋转,本质上是对旋转后图片中每个像素点在原图中的位置进行计算。然后将这些位置上的像素值复制过来,就完成了旋转。如果计算出的位置不是整数,则由于像素点是离散的,需要四舍五入到最近的像素点。

图片旋转,本质上是对旋转后的图片中每个像素点计算在原图的位置。然后照搬过来就好。

(多说一句,如果计算出来在原图中的位置不是整数而是小数,因为像素点个数都是整数,就需要小数到整数的转换。这个转换过程是有讲究的,需要用到插值:最近邻插值、双线性插值等等。这里我使用的是最简单的最近邻插值,即对小数四舍五入成整数,C/C++ 实现四舍五入见 这里 )

图形图像课上一般会介绍旋转变换矩阵,其中 t 为需要旋转的角度,[x'; y']是变换后坐标(其中分号表示上下关系):

即表示为:[x'; y'] = [cos(t) sin(t); -sin(t) cos(t)][x; y]

因为我个人兴趣爱好(放P就是老师逼的。。。),不允许使用 OpenCV 封装好的旋转函数。只能自己实现,我开始的想法是:先求变换矩阵逆矩阵,然后将一张全黑图中每个点一一对应插值到原图中。

结果发现转换后图片全黑了……

后来发现原点设置不对。用OpenCV中的 Mat格式存储(或二维数组)的图片, 原点在左上角 。但是想要实现的 旋转原点在图片中心 。

如何用OpenCV和C语言实现图片旋转功能?

同时, Mat格式存储(或二维数组)的 坐标系中 y轴正方向向下 。

阅读全文

本文共计1245个文字,预计阅读时间需要5分钟。

如何用OpenCV和C语言实现图片旋转功能?

图片旋转,本质上是对旋转后图片中每个像素点在原图中的位置进行计算。然后将这些位置上的像素值复制过来,就完成了旋转。如果计算出的位置不是整数,则由于像素点是离散的,需要四舍五入到最近的像素点。

图片旋转,本质上是对旋转后的图片中每个像素点计算在原图的位置。然后照搬过来就好。

(多说一句,如果计算出来在原图中的位置不是整数而是小数,因为像素点个数都是整数,就需要小数到整数的转换。这个转换过程是有讲究的,需要用到插值:最近邻插值、双线性插值等等。这里我使用的是最简单的最近邻插值,即对小数四舍五入成整数,C/C++ 实现四舍五入见 这里 )

图形图像课上一般会介绍旋转变换矩阵,其中 t 为需要旋转的角度,[x'; y']是变换后坐标(其中分号表示上下关系):

即表示为:[x'; y'] = [cos(t) sin(t); -sin(t) cos(t)][x; y]

因为我个人兴趣爱好(放P就是老师逼的。。。),不允许使用 OpenCV 封装好的旋转函数。只能自己实现,我开始的想法是:先求变换矩阵逆矩阵,然后将一张全黑图中每个点一一对应插值到原图中。

结果发现转换后图片全黑了……

后来发现原点设置不对。用OpenCV中的 Mat格式存储(或二维数组)的图片, 原点在左上角 。但是想要实现的 旋转原点在图片中心 。

如何用OpenCV和C语言实现图片旋转功能?

同时, Mat格式存储(或二维数组)的 坐标系中 y轴正方向向下 。

阅读全文