python basic programming: OpenCV2 Geometric image transformation (translation, mirroring, scaling, rotation, affine)

This article describes the Python3 + OpenCV2 achieve image geometric transformations (translation, mirroring, scaling, rotation, affine), Xiao Bian feel very good, now for everyone to share, but also to be a reference. Come and see, to follow the small series together
Foreword

. Summarize some notes on opencv image geometric transformation recently read
this artwork is: Here Insert Picture Description
1. translation

import cv2
import numpy as np
 
img = cv2.imread("image0.jpg", 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
 
dst = np.zeros(imgInfo, np.uint8)
 
for i in range( height ):
  for j in range( width - 100 ):
    dst[i, j + 100] = img[i, j]
 
cv2.imshow('image', dst)
cv2.waitKey(0)

demo is very simple, the image is shifted by 100 pixels to the right in FIG:
Here Insert Picture Description
2. Mirror

import cv2
import numpy as np
 
 
img = cv2.imread('image0.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height= imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]
 
dst = np.zeros([height*2, width, deep], np.uint8)
 
for i in range( height ):
  for j in range( width ):
    dst[i,j] = img[i,j]
    dst[height*2-i-1,j] = img[i,j]
 
for i in range(width):
  dst[height, i] = (0, 0, 255)
cv2.imshow('image', dst)
cv2.waitKey(0)

effect that generates a demo: Here Insert Picture Description
3. Zoom

import cv2
img = cv2.imread("image0.jpg", 1)
imgInfo = img.shape
print( imgInfo )
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
 
# 1 放大 缩小 2 等比例 非等比例
dstHeight = int(height * 0.5)
dstWeight = int(width * 0.5)
 
# 最近邻域插值 双线性插值 像素关系重采样 立方插值
dst = cv2.resize(img, (dstWeight,dstHeight))
print(dst.shape)
cv2.imshow('image', dst)
cv2.waitKey(0)

Use resize direct scaling operation, but also can be scaled using the neighbor interpolation method, as follows:

# 1 info 2 空白模板 3 重新计算x, y
import cv2
import numpy as np
img = cv2.imread('image0.jpg', 1)
imgInfo = img.shape # 先高度,后宽度
height = imgInfo[0]
width = imgInfo[1]
dstHeight = int(height/2)
dstWidth = int(width/2)
 
dstImage = np.zeros([dstHeight, dstWidth, 3], np.uint8)
for i in range( dstHeight ):
  for j in range(dstWidth):
    iNew = i * ( height * 1.0 / dstHeight )
    jNew = j * ( width * 1.0 / dstWidth )
 
    dstImage[i,j] = img[int(iNew),int(jNew)]
 
cv2.imshow('image', dstImage)
cv2.waitKey(0)

4. Rotate

import cv2
 
img = cv2.imread('image0.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height= imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]
 
# 定义一个旋转矩阵
matRotate = cv2.getRotationMatrix2D((height*0.5, width*0.5), 45, 0.7) # mat rotate 1 center 2 angle 3 缩放系数
 
dst = cv2.warpAffine(img, matRotate, (height, width))
 
cv2.imshow('image',dst)
cv2.waitKey(0)

Rotating need to define a rotation matrix, cv2.getRotationMatrix2D (), parameters 1: 2 requires a center point of rotation of the parameters: angle of rotation required three parameters: the zoom ratio required results as shown: Here Insert Picture Description
5. affine

import cv2
import numpy as np
 
img = cv2.imread('image0.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height= imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]
# src 3 -> dst 3 (左上角, 左下角,右上角)
matSrc = np.float32([[0,0],[0,height-1],[width-1, 0]]) # 需要注意的是 行列 和 坐标 是不一致的
matDst = np.float32([[50,50],[100, height-50],[width-200,100]])
 
matAffine = cv2.getAffineTransform(matSrc,matDst) #mat 1 src 2 dst 形成组合矩阵
dst = cv2.warpAffine(img, matAffine,(height, width))
cv2.imshow('image',dst)
cv2.waitKey(0)

Three coordinates necessary to determine the image matrix, and (top left, bottom left, top right). Coordinates of three points define two matrices, matSrc of the original image, matDst affine coordinates of three points is performed by cv2 . .getAffineTransform () combined to form a matrix effect is as follows: Here Insert Picture Description
content on more than how many, and finally to recommend a good reputation in the number of public institutions [programmers], there are a lot of old-timers learning skills, learning experience, interview skills, workplace experience and other share, the more we carefully prepared the zero-based introductory information, information on actual projects, the timing has to explain the Python programmer technology every day, share some learning methods and the need to pay attention to small detailsHere Insert Picture Description

Published 35 original articles · won praise 1 · views 10000 +

Guess you like

Origin blog.csdn.net/chengxun02/article/details/105029488