OpenCV入门6——图像基本变换

文章目录

  • 图像的放大与缩小
    • 缩放算法
    • 放大
  • 图像的翻转
  • 图像的旋转
  • 仿射变换之图像平移
  • 仿射变换之获取变换矩阵
  • 仿射变换之变换矩阵之二
  • OpenCV透视变换

图像的放大与缩小

OpenCV入门6——图像基本变换_第1张图片

缩放算法

OpenCV入门6——图像基本变换_第2张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//4.jpg')
# (600, 480, 3)

new_img = cv2.resize(img, (300, 240))
new_img2 = cv2.resize(img, (300, 240), interpolation=cv2.INTER_AREA)

cv2.imshow('new_img', new_img)
cv2.imshow('img', img)
cv2.imshow('new_img2', new_img2)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//4.jpg')
# (600, 480, 3)

new_img = cv2.resize(img, None, fx=0.3, fy=0.3)
new_img2 = cv2.resize(img, (300, 240), interpolation=cv2.INTER_AREA)

cv2.imshow('new_img', new_img)
cv2.imshow('img', img)
cv2.imshow('new_img2', new_img2)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

放大

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//4.jpg')
# (600, 480, 3)

new_img = cv2.resize(img, None, fx=1.3, fy=1.3)
new_img2 = cv2.resize(img, (300, 240), interpolation=cv2.INTER_AREA)

cv2.imshow('new_img', new_img)
cv2.imshow('img', img)
cv2.imshow('new_img2', new_img2)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

图像的翻转

OpenCV入门6——图像基本变换_第3张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//4.jpg')
# 上下翻转
img2 = cv2.flip(img, 0)
# 左右翻转
img3 = cv2.flip(img, 1)
# 上下左右翻转
img4 = cv2.flip(img, -1)

cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.imshow('img4', img4)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

图像的旋转

OpenCV入门6——图像基本变换_第4张图片
OpenCV入门6——图像基本变换_第5张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//4.jpg')

img2 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
img3 = cv2.rotate(img, cv2.ROTATE_180)
img4 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)

cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.imshow('img4', img4)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

仿射变换之图像平移

详细见官方文档
OpenCV入门6——图像基本变换_第6张图片
OpenCV入门6——图像基本变换_第7张图片
OpenCV入门6——图像基本变换_第8张图片
OpenCV入门6——图像基本变换_第9张图片
OpenCV入门6——图像基本变换_第10张图片
第一行的第三列是x轴偏移量,第二行第三列是y轴偏移量

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//4.jpg')
w, h, ch = img.shape
M = np.float32([[1, 0, 100], [0, 1, 20]])

img2 = cv2.warpAffine(img, M, (h, w))

cv2.imshow('img', img)
cv2.imshow('img2', img2)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

仿射变换之获取变换矩阵

OpenCV入门6——图像基本变换_第11张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//10.jpg')
w, h, ch = img.shape
# M = np.float32([[1, 0, 100], [0, 1, 20]])

# 旋转的角度为逆时针
M = cv2.getRotationMatrix2D((100, 100), 30, 1)
M2 = cv2.getRotationMatrix2D((h / 2, w / 2), 60, 0.6)

# 如果想改变新图像尺寸,需修改dsize
img2 = cv2.warpAffine(img, M, (h, w))
img3 = cv2.warpAffine(img, M2, (h, w))

cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

仿射变换之变换矩阵之二

OpenCV入门6——图像基本变换_第12张图片
OpenCV入门6——图像基本变换_第13张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//10.jpg')
w, h, ch = img.shape
# M = np.float32([[1, 0, 100], [0, 1, 20]])

# 旋转的角度为逆时针
# M = cv2.getRotationMatrix2D((100, 100), 30, 1)
# M2 = cv2.getRotationMatrix2D((h / 2, w / 2), 60, 0.6)

src = np.float32([[100, 200], [300, 200], [100, 400]])
dst = np.float32([[50, 100], [200, 400], [90, 300]])

M = cv2.getAffineTransform(src, dst)

# 如果想改变新图像尺寸,需修改dsize
img2 = cv2.warpAffine(img, M, (h, w))
# img3 = cv2.warpAffine(img, M2, (h, w))

cv2.imshow('img', img)
cv2.imshow('img2', img2)
# cv2.imshow('img3', img3)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('E://pic//10.jpg')
w, h, ch = img.shape
# M = np.float32([[1, 0, 100], [0, 1, 20]])

# 旋转的角度为逆时针
# M = cv2.getRotationMatrix2D((100, 100), 30, 1)
# M2 = cv2.getRotationMatrix2D((h / 2, w / 2), 60, 0.6)

src = np.float32([[100, 200], [300, 200], [100, 400]])
dst = np.float32([[50, 100], [200, 400], [60, 500]])

M = cv2.getAffineTransform(src, dst)

# 如果想改变新图像尺寸,需修改dsize
img2 = cv2.warpAffine(img, M, (h, w))
# img3 = cv2.warpAffine(img, M2, (h, w))

cv2.imshow('img', img)
cv2.imshow('img2', img2)
# cv2.imshow('img3', img3)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

OpenCV透视变换

OpenCV入门6——图像基本变换_第14张图片
OpenCV入门6——图像基本变换_第15张图片
OpenCV入门6——图像基本变换_第16张图片

# -*- coding: utf-8 -*-
import cv2
import numpy as np

cv2.namedWindow('img', cv2.WINDOW_NORMAL)
cv2.namedWindow('img2', cv2.WINDOW_NORMAL)
img = cv2.imread('perspective.jpeg')

src = np.float32([[100, 1000], [2100, 1000], [0, 4000], [2500, 3900]])
dst = np.float32([[0, 0], [2300, 0], [0, 3000], [2300, 3000]])
M = cv2.getPerspectiveTransform(src, dst)

img2 = cv2.warpPerspective(img, M, (2300, 3000))

cv2.imshow('img', img)
cv2.imshow('img2', img2)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()


之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

你可能感兴趣的:(OpenCV,opencv,人工智能,计算机视觉,经验分享)