画像幾何変換
アフィン変換(平行移動、拡大縮小、回転、フリップ)の2×3行列、透視変換3x3の行列に基づく:原理的に画像の幾何学的変換は、2つのタイプを含みます。
画像変換
画像変換を達成するためにOpenCVの
画像変換を達成するため、我々は以下の行列を定義する必要があり、TX及びTYは、x及びy並進距離方向である:
アフィン変換の変換関数cv.warpAffineを用いて画像()実装
実験
# 图像平移
import numpy as np
import cv2 as cv
img = cv.imread('paojie.jpg')
rows, cols = img.shape[:2]
# 定义平移矩阵,需要是numpy的float32类型
# x轴平移100,y轴平移50
M = np.float32([[1, 0, 100], [0, 1, 50]])
# 用仿射变换实现平移,第三个参数为dst的大小
dst = cv.warpAffine(img, M, (cols, rows))
cv.imshow('shift', dst)
cv.waitKey(0)
cv.destroyAllWindows()
実験結果
画像のスケーリング
画像スケーリングでOpenCVの
ズームは、画像スケーリングを実現するために、画像、使用cv.resize()関数のサイズを変更しています。はい、あなたはまた、指定されたサイズのスケーリングに合わせてズームすることができます。
実験
# 图像缩放
import numpy as np
import cv2 as cv
img = cv.imread('paojie.jpg')
# 按照指定的宽度、高度缩放图片
res = cv.resize(img, (132, 150))
# 按照比例缩放,如x,y方向均放大一倍
# res2 = cv.resize(img, None, fx=2, fy=2, interpolation=cv.INTER_CUBIC)
cv.imshow('shrink', res)
# cv.imshow('zoom', res2)
cv.waitKey(0)
cv.destroyAllWindows()
実験結果
様々な補間モード
参考:記載した様々な補間法
画像の回転
簡単な紹介
回転変換と同様に、アフィン変換を用いるので、変換行列を定義する必要があることです。:マトリックスを生成するために直接OpenCVのcv.getRotationMatrix2D()関数を提供する、関数は3つのパラメータを有する
パラメータ1:回転中心ピクチャ
パラメータ2:回転角(N:反時計回りに、負:時計回り)
、スケーリング:パラメータ3 0.5は半分に低減されます
実験
# 图像旋转
import numpy as np
import cv2 as cv
img = cv.imread('paojie.jpg')
rows,cols = img.shape[:2]
# 逆时针45°旋转图片并缩小一半,第一个参数为旋转中心
M = cv.getRotationMatrix2D((cols / 2, rows / 2), 45, 0.5)
# img:源图像;M:旋转仿射矩阵;(cols,rows):dst的大小
dst = cv.warpAffine(img, M, (cols, rows))
cv.imshow('rotation', dst)
cv.waitKey(0)
cv.destroyAllWindows()
実験結果
イメージフリップ
画像フリップOpenCVの
DST = cv2.flip(IMG、1)
第二のパラメータの関数が0より大きいことを特徴と、画像が(Y軸方向)、左右反転表し、2番目のパラメータが0に等しく、それは垂直反転画像(x軸)を表す;第2つのパラメータは、0未満の画像の両方左右反転及び上下反転を表します。
実験
# 图像翻转
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread('paojie.jpg')
# 水平翻转
hor = cv.flip(img,1)
# 垂直翻转
ver = cv.flip(img,0)
# 水平垂直翻转
hor_ver = cv.flip(img,-1)
plt.figure(1)
plt.subplot(2,2,1)
plt.imshow(img)
plt.title('Original')
plt.xticks([]),plt.yticks([])
plt.subplot(2,2,2)
plt.imshow(hor)
plt.title('horizontal')
plt.xticks([]),plt.yticks([])
plt.subplot(2,2,3)
plt.imshow(ver)
plt.title('vertical')
plt.xticks([]),plt.yticks([])
plt.subplot(2,2,4)
plt.imshow(hor_ver)
plt.title('horizontal_and_vertical')
plt.xticks([]),plt.yticks([])
plt.show()
実験結果
全体の記事を読んだ後、賞賛がリラックス指していません。