opencv学习6——图像移动

一、API实现

1.实质构建大矩阵,将原矩阵元素写入新矩阵

2.使用API涉及矩阵的变换

3. 仿射变换函数

cv2.warpAffine(src,M,dsize[,dst[,flags[,borderMode[,borderValue]]]])

src,输入图像。

M,变换矩阵。

Dsize,输出图像的大小(列行值),(cols,rows)

flags,插值方法的组合

borderMode,边界像素模式

borderValue,边界填充值,缺省为0。

4.通用移动矩阵M =  ,像素点矩阵 p =

M = A + B =   +  ,

结果p’ = A * p + B =

p’T =

二、基于像素直接操作

1.实质,像素的重新写入

2.sourcePix[i,j] = goalPix[i+dy,j+dx]

三、代码实现

1.

import cv2
import numpy as np

dx = 100
dy = 200
img = cv2.imread('image01.jpg',1)
imgHeight,imgWidth,imgMode = img.shape

matShift = np.float32([[1,0,dx],
                       [0,1,dy]])

dst = cv2.warpAffine(img,matShift,(imgWidth+dx,imgHeight+dy))
# 图像显示,在移动后,原本区域留白
cv2.imshow('image',dst)

cv2.waitKey(0)
cv2.destroyAllWindows()

2.

# 基于像素的实现

import cv2
import numpy as np

dx = 100
dy = 200
img = cv2.imread('image01.jpg',1)
imgHeight,imgWidth,imgMode = img.shape
dstHeight,dstWidth = imgHeight + dy, imgWidth + dx

dstImg = np.zeros((dstHeight,dstWidth,imgMode), np.uint8)

for i in range(imgHeight):
    for j in range(imgWidth):
        dstImg[i+dy, j+dx] = img[i, j]

cv2.imshow('image', dstImg)

cv2.waitKey(0)
cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/nominior/article/details/82765951
今日推荐