0%

cv实现图片裁剪以及移位

前言

想跟着b站大佬,去学习一些相关知识

使用opencv对图像进行裁剪以及移位

过程

图片剪切

代码部分

1
2
3
4
5
6
7
# 图片剪切功能
import cv2
img = cv2.imread('YT.jpg', 1)
imgInfo = img.shape
dst = img[3000:3600, 3100:3700]
cv2.imshow('img', dst)
cv2.waitKey(0)

结果展示

原图:

image

处理后:

image

使用API的方式对图片进行位移

代码部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import cv2
import numpy as np

img = cv2.imread('YT.jpg', 1)
# cv2.imshow('src', img)
imgInfo = img.shape
imgH = imgInfo[0]
imgW = imgInfo[1]
matShift = np.float32([[1, 0, 100], [0, 1, 200]])
dst = cv2.warpAffine(img, matShift, (imgH, imgW))
# 参数1:原始图片信息 参数2:移位矩阵 参数3:相关信息
cv2.namedWindow("enhanced", cv2.WINDOW_FREERATIO)
# 如果图片特别大,可以采用以上方法
cv2.imshow("enhanced", dst)
cv2.waitKey(0)

运行结果

原图:

image

运行结果:

image

可以看见图像明显的进行了移位

使用源码的形式对图片进行位移

代码部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import cv2
import numpy as np
img = cv2.imread('YT.jpg', 1)
cv2.namedWindow("YT", cv2.WINDOW_FREERATIO)
cv2.imshow('YT', img)
imgInfo = img.shape
dst = np.zeros(img.shape, np.uint8)
height = imgInfo[0]
weight = imgInfo[1]
for i in range(0, height):
for j in range(0, weight-100):
dst[i][j+100] = img[i, j]
cv2.namedWindow("img", cv2.WINDOW_FREERATIO)
cv2.imshow('img', dst)
cv2.waitKey(0)

运行结果

image

左边为原图,右边为移动后的图片(由于图片过大,因此放大了一下)

其他

如果原图太大,当前屏幕无法进行显示

可以在imshow()方法前面加入cv2.namedWindow("enhanced", cv2.WINDOW_FREERATIO),便可实现窗口自适应并可以进行相关放缩

-------------我也是有底线的哦如需更多,欢迎打赏-------------