Opencv几何变换之平移

我回来啦,今天讲讲平移吧~

平移就是将图像换个位置。(这么简单的问题就不要说啦)

图像是由一个一个的像素构成的,而像素我们可以通过坐标来表示,坐标可以用矩阵表示,那么平移自然是按矩阵来啦~\(≧▽≦)/~啦啦啦

博主数学不好,所以粗略讲解一下平移时的矩阵:

矩阵

这是沿(x,y)方向

移动(tx,ty)距离

(没打出角标,大家不要怪我,呜呜)

下面我们要把图像平移(100,50)个像素

我上一张效果图大家看看~

平移后的效果图

大家看出来了吗?(100,50)是在x方向是移动了100,在y方向上移动了50,这是往右下方移动了,为什么是右下呢?

沿(x,y)方向平移,自然是45度,所以无可厚非是斜的,数学上象限左加右减还记得吗?就是这个道理

平移换种说法就是:

我们设现在的像素点是(x,y),平移距离dx,dy,那么平移后的像素大小为(X,Y)=(x-dx,y-dy)。(左加右减别记错了~)

再就是一个我们要用到的函数啦

  • cv2.warpAffine()

这个函数我们前几张提到过,参数为

嘻嘻,不告诉你,去源码中找找,

上源码~

 

# -*- coding:utf-8 -*-
"""
Created on Sun Feb 12 21:54:08 2017

@author: Y

"""

import cv2
import numpy as np
 
img = cv2.imread('C:\Users\Administrator\Desktop\opencvimg\haibaobaobao.jpg')
rows,cols,channel = img.shape
# 行,列,通道,img.shape中讲过的,回去看
M = np.float32([[1,0,100],[0,1,50]])
#np.float32是用数据类型,用来表示矩阵,注意矩阵中的1,0和0,1是运算后的结果,不要直接当成移动前和移动后的坐标来看
dst = cv2.warpAffine(img,M,(1000,1050))
#dst是输出,cv2.warpAffine函数参数(输出图像名称,变换矩阵,窗口变换后的长和宽(这里我们保持不变,有兴趣的可以试试))
cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

我贴出源码的目的是为了让大家更好的了解这个程序,而不是让大家复制粘贴哦,学习要认真的!

 

我把原图像发给大家

这张可爱的海豹宝宝~

我是Y,博主最近更新迟缓,脑瓜有些迟钝,思维有些混乱,希望大家不定时来看看网站更新了没有(duo  fang wen ji ci),哈哈,晚安啦~