Python利用OpenCV做图像几何 变换

图像的仿射变换有方程法和矩阵法,这里不做介绍,本人主要利用OpenCVwarpAffine函数和python来实现图像的几何变换

首先了解一下warpAffine函数的各个参数

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

该函数由OpenCV提供,实现图像的仿射变换

参数解释:

参数

解释

src

输入图像矩阵

M

23列的仿射变换矩阵

dsize

二元元组(宽,高),输出图像的大小

flags

插值法:INTE_NEARESTINTE_LINEAR(默认)等

borderModel

填充模式:BORDER_CONSTANT

borderValue

borderModel=BORDER_CONSTANT时的填充值

以下是使用该函数,通过改变仿射矩阵完成对图像的缩小、平移、旋转等操作,python代码实现如下:

# -*- coding:utf-8 -*-

import numpy as np

import cv2

import sys

import math

#主函数

if __name__ == "__main__":

    if len(sys.argv)>1:

        image = cv2.imread(sys.argv[1],cv2.CV_LOAD_IMAGE_GRAYSCALE)

    else:

        print "请输入图像"

    cv2.imwrite("img.jpg",image)

    #原图的高、宽

    h,w=image.shape[:2]

    #防射变换矩阵,缩小2

    A1 = np.array([[0.5,0,0],[0,0.5,0]],np.float32)

    d1 = cv2.warpAffine(image,A1,(w,h),borderValue=125)

    #先缩小2倍,再平移

    A2 = np.array([[0.5,0,w/4],[0,0.5,h/4]],np.float32)

    d2 = cv2.warpAffine(image,A2,(w,h),borderValue=125)

    #d2的基础上,绕图像的中心点旋转

    A3 = cv2.getRotationMatrix2D((w/2.0,h/2.0),30,1)

    d3 = cv2.warpAffine(d2,A3,(w,h),borderValue=125)

    cv2.imshow("image",image)

    cv2.imshow("缩小",d1)

    cv2.imshow("缩小平移",d2)

    cv2.imshow("缩小平移旋转",d3)

    cv2.waitKey(0)

cv2.destoryAllWindows()

 

运行如下:

白俊遥博客

结果如下:

原图:

白俊遥博客

缩小图:

白俊遥博客

缩小平移图:

白俊遥博客

缩小平移旋转图:

   白俊遥博客

aliyun
赵群博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论