图片的剪切:
import cv2
img = cv2.imread('1.jpg', 1)
info = img.shape
dst = img[100: 200, 100: 300] # 分别是高和宽
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)
代码很简单,就不做详细记录了,最终的显示是: 接下来,我们要做的是进行图片移位的学习。
import cv2
import numpy as np
img = cv2.imread('1.jpg', 1)
info = img.shape
cv2.imshow('src', img)
height = info[0]
width = info[1]
# 定义移位
matShift = np.float32([[1, 0, 100], [0, 1, 200]])
# 这里的功能是进行矩阵的移位,是图片的移位的API,更是矩阵运算
dst = cv2.warpAffine(img, matShift, (height, width))
cv2.imshow('dst', dst)
cv2.waitKey(0)
其中移位的效果图是:
其中移位的算法原理是:[[1, 0, 100], [0, 1, 200]]
将其拆分成两个矩阵,第一个为2*2的矩阵,第二个为2*1的矩阵,这里是:[[1,0],[0,1]]记录为A;[[100],[200]]记录为B
输入的X和Y定义为C,实际的运算公式是A*C+B得到的了会得到[[X+100],[Y+200]],则可以看作是图片横坐标移位100,纵坐标移位200得到。这个是warpAffine这个API所代表的算法原理
通过像素级别怎么移动呢:(10,20)->(110,220)变成了这样。
import cv2
import numpy as np
img = cv2.imread('1.jpg', 1)
info = img.shape
cv2.imshow('src', img)
dst = np.zeros(img.shape, np.uint8) # uint8可以代表0-255的值
height = info[0]
width = info[1]
for i in range(0, height):
for j in range(0, width-100): # 右移100个像素
dst[i, j+100] = img[i, j]
cv2.imshow('image',dst)
cv2.waitKey(0)
这个就是用源码实现图片的位移,实现的效果是(将图片向右移动100个像素):