在Python下利用OpenCV来旋转图像的教程

 更新时间:2015年04月16日 14:51:34   转载 投稿:goldensun  
这篇文章主要介绍了在Python下利用OpenCV来旋转图像的教程,代码和核心的算法都非常简单,需要的朋友可以参考下

OpenCV是应用最被广泛的的开源视觉库。他允许你使用很少的代码来检测图片或视频中的人脸。

这里有一些互联网上的教程来阐述怎么在OpenCV中使用仿射变换(affine transform)旋转图片--他们并没有处理旋转一个图片里的矩形一般会把矩形的边角切掉这一问题,所以产生的图片需要修改。当正确的使用一点代码时,这是一点瑕疵。
 

def rotate_about_center(src, angle, scale=1.):
  w = src.shape[1]
  h = src.shape[0]
  rangle = np.deg2rad(angle) # angle in radians
  # now calculate new image width and height
  nw = (abs(np.sin(rangle)*h) + abs(np.cos(rangle)*w))*scale
  nh = (abs(np.cos(rangle)*h) + abs(np.sin(rangle)*w))*scale
  # ask OpenCV for the rotation matrix
  rot_mat = cv2.getRotationMatrix2D((nw*0.5, nh*0.5), angle, scale)
  # calculate the move from the old center to the new center combined
  # with the rotation
  rot_move = np.dot(rot_mat, np.array([(nw-w)*0.5, (nh-h)*0.5,0]))
  # the move only affects the translation, so update the translation
  # part of the transform
  rot_mat[0,2] += rot_move[0]
  rot_mat[1,2] += rot_move[1]
  return cv2.warpAffine(src, rot_mat, (int(math.ceil(nw)), int(math.ceil(nh))), flags=cv2.INTER_LANCZOS4)

从原始图像的中心到目标图像的中心,在旋转中的仿射变换必须结合 仿射变换的平移。一个在平面中(2D)的仿射变换是一个2x2的矩阵A和一个平移的向量a-它取得原始点p = (x,y)到目标:Ap + a.结合了两次变换Ap + a和Bp+b,先做A然后是B,软后得到了 B(Ap + a)+ b --另一个与矩阵BA和向量Ba + b的仿射变换。


在此情况下,我们正在把旋转功能与平移合并。作为相似变换的平移具有2x2矩阵I与运动矢量m的特征,所以,以Ip + m表示,我们想首先平移到新的中心,饭后旋转它,这样,在应用Ip + m 后我们旋转Rp + r,产生Rp + Rm + r,这解释了为什么我们不得不只增加两个系数。

附言:悲哀地说,如果numpy把输入的数据看作是矢量的矢量,而不是矩阵,那解释了乘法算子不是矩阵乘法,所以,我们必须明确地写入np.dot。

又附言:我们使用兰索斯插值,这一般对扩展有利而对把规模缩得非常小不利;考虑到应用方面,我们应该改编这个插值。

再附言:与Python的相互作用因cv2模块而改善很多,但是因为numpy的坐标不同于OpenCV,所以仍不可避免地有一些为完善之处。另外,因某个原因,OpenCV始终把各单元当作度数而不是弧度使用,等等。就numpy而言,图像阵列中的坐标是以[y,x]次序存取的,如首先垂直向下增加,接着水平向右增加一样。就OpenCV而言,大小用(宽度,高度)表示,次序正相反。

相关文章

  • Python3访问并下载网页内容的方法

    Python3访问并下载网页内容的方法

    这篇文章主要介绍了Python3访问并下载网页内容的方法,实例分析了Python页面抓取及写入文件的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • pycharm 批量修改变量名称的方法

    pycharm 批量修改变量名称的方法

    这篇文章主要介绍了pycharm 批量修改变量名称的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python实现统计单词出现的个数

    Python实现统计单词出现的个数

    这篇文章主要介绍了Python实现统计单词出现的个数,本文给出了实现代码以及使用方法,需要的朋友可以参考下
    2015-05-05
  • Python 实现大整数乘法算法的示例代码

    Python 实现大整数乘法算法的示例代码

    这篇文章主要介绍了Python 实现大整数乘法算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 使用py2exe在Windows下将Python程序转为exe文件

    使用py2exe在Windows下将Python程序转为exe文件

    这篇文章主要介绍了Windows下用py2exe将Python程序转为exe文件的方法,注意py2exe只是负责文件格式的转换,并不能将Python程序编译为机器码,要的朋友可以参考下
    2016-03-03
  • python字符串替换第一个字符串的方法

    python字符串替换第一个字符串的方法

    这篇文章主要介绍了python字符串替换第一个字符串的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • python生成ppt的方法

    python生成ppt的方法

    这篇文章主要为大家详细介绍了python生成ppt的方法,通过python生成ppt文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • python 常用的基础函数

    python 常用的基础函数

    这篇文章主要介绍了python 77种常用的基础函数,学习python的朋友可以收藏一下,简单了解一下,方便后期使用
    2018-07-07
  • python做量化投资系列之比特币初始配置

    python做量化投资系列之比特币初始配置

    这篇文章主要为大家详细介绍了python做量化投资系列之比特币初始配置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 对TensorFlow中的variables_to_restore函数详解

    对TensorFlow中的variables_to_restore函数详解

    今天小编就为大家分享一篇对TensorFlow中的variables_to_restore函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07

最新评论