在拿到一张图片时,如果要进行截图操作,那么就需要获取图片中需要截取位置,也就是坐标。通常是4个点位置,如果没有辅助工具,很比较麻烦的。
比如,获取上图中的验证码部分。
为了解决这一问题,我们可以调用python,来通过手动截取,然后保存坐标位置。
import cv2
import json
import pytesseract
from PIL import Image
def custom_crop(image_path='test.jpg', save_path='cropped_region.json'):
# 读取图片
image = cv2.imread(image_path)
# 创建窗口并显示图片
cv2.namedWindow('Select Region')
cv2.imshow('Select Region', image)
# 选择裁剪区域
print("Select the region to crop and press 'c' to confirm:")
bbox = cv2.selectROI('Select Region', image, fromCenter=False, showCrosshair=True)
cv2.destroyAllWindows()
# 裁剪图像
cropped_image = image[int(bbox[1]):int(bbox[1]+bbox[3]), int(bbox[0]):int(bbox[0]+bbox[2])]
# 如果提供了保存路径,则保存裁剪区域的坐标位置
if save_path:
region_data = {'x': int(bbox[0]), 'y': int(bbox[1]), 'width': int(bbox[2]), 'height': int(bbox[3])}
with open(save_path, 'w') as json_file:
json.dump(region_data, json_file)
return cropped_image
#第一个参数是验证码图片路径,第二个是保存坐标的路径
custom_crop()
函数读取图片路径,手动截取位置,坐标会保存到json文件。然后我们只需要固定住坐标位置,进行截图。
def crop_and_save_image(image_path, save_path, x, y, width, height):
# 读取图片
image = cv2.imread(image_path)
# 裁剪图像
cropped_image = image[y:y+height, x:x+width]
# 保存裁剪后的图像
cv2.imwrite(save_path, cropped_image)
# 图片路径
image_path = 'test.jpg'
# 裁剪区域的坐标
x = 96 # 你填入的 x 坐标
y = 16 # 你填入的 y 坐标
width = 147 # 你填入的裁剪宽度
height = 60 # 你填入的裁剪高度
# 保存路径
save_path = 'cropped_image.png'
# 裁剪并保存图像
crop_and_save_image(image_path, save_path, x, y, width, height)
print(f"Cropped image saved to {save_path}")
函数中的4个点位置坐标,是我们从json中获取。就可以获取到指定区域的截图啦。
好用的函数,快来使用吧。