使用场景:根据固定左上、右下、坐标点进行标准矩形截图,对截图进行你想要的处理,再拼接回去。
很多时候我们需要使用代码自动进行图像的某一部分处理,处理之后还要再拼接回来,为了避免手动重复工作
原图如下:
截图后:
截图后处理:粉色的小星星是我自己画的
最后拼接回去
实现代码:
截图部分:
import cv2
def cv_show(neme, img):
# 调整宽高(再次运行也只会加载你调整后的宽高)
# cv2.namedWindow(neme, cv2.WINDOW_NORMAL)
cv2.imshow(neme, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 读取图像
img = cv2.imread("T.jpg")
# 第一张 左上 右下 坐标点
# 565 7
# 696 177
x1, y1, x2, y2 = 565, 7, 696, 177
# 截图 y1 y2 x1 x2
image1 = img[y1:y2, x1:x2]
# 存储 截图 左上 右下 坐标
with open("xy.txt", "w") as f:
f.write("{} {} {} {} ".format(x1, y1, x2, y2))
cv_show("1", image1)
cv2.imwrite("T0.jpg", image1)
print("图像裁剪完成")
拼接截图:
import cv2
import numpy as np
import os
def cv_show(neme, img):
# cv2.namedWindow(neme, cv2.WINDOW_NORMAL)
cv2.imshow(neme, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 读取原图的大小
img = cv2.imread("T.jpg")
# 读取截图
img1 = cv2.imread("T1.jpg")
# 创建一个纯黑的大图
mage = np.zeros((img.shape[0], img.shape[1], 3), np.uint8)
# 读取截图的坐标
with open("xy.txt", "r") as f:
data = f.read()
# print(data)
# 默认空格分割
x1, y1, x2, y2 = data.split()
# print(x1, y1, x2, y2)
# # 将要拼接的两张图像覆盖到大图上
# 截图顺序y1 y2 x1 x2
mage[:] = img
mage[int(y1):int(y2), int(x1):int(x2)] = img1
cv_show("s", mage)
# 保存图像
cv2.imwrite('T2.jpg', mage)
# 删除xy.txt
os.remove("xy.txt")
print("图像拼接完成")