一、单张图片
1、先使用opencv读取本地的图片
import cv2
import os
yes_path = "/home/图片/下载.jpeg" #图片地址
im = cv2.imread(yes_path) #读取图片
cv2.imshow("1",im) #获取目标区域的四个坐标点
cv2.waitKey(0)
如果因图片尺寸太大,用cv读取的时候占满了整个屏幕而无法获取到坐标点,可使用以下代码:
import cv2
img = cv2.imread('./1ad0684c-89cd-4c39-b321-3d06b5d9b3a7.jpg')
cv2.namedWindow('demo', 0)
cv2.imshow("demo", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、运行代码后,读取的图片,将图片放大,用鼠标获得想要裁剪的目标区域(比如英文字母strawberry)的四个坐标点。
x1,y1 = 66,180
x2,y2 = 149,177
x3,y3 = 65,189
x4,y4 = 150,192
3、对图片进行裁剪并保存到本地,建议x0和y0取最小点(我取的是x3,y2),x1和y1取最大点(我取的是x3,y2)
cropped = im[y2:y4, x3:x4] # 裁剪坐标为[y0:y1, x0:x1]
cv2.imwrite("/home/图片/cut_little.jpg", cropped)
运行代码后得到的图片如下:
4、保存后发现图片尺寸很小,于是对图片进行放大再存入本地。scaleX、scaleY是缩放因子,我选择放大12倍,可自行选择放大还是缩小,代码如下:
scaleX = 0.6
scaleY = 0.6
im2 = cv2.resize(cropped, None, fx= scaleX*20, fy= scaleY*20, interpolation= cv2.INTER_LINEAR)
cv2.imwrite("/home/图片/cut_little.jpg", im2)
保存图片如下:
二、多张图片
如果是同一个场景下的不同图片,想要获取目标区域的变化情况,可以使用以下代码:
import cv2
import os
i =0
#os.walk 根目录路径、本目录中文件夹名字、本目录中文件名字
for root, dirs, files in os.walk(r"/media/Data/2021_0313"): # 这里就填文件夹目录就可以了
for file in files:
# 获取文件路径
if '.jpg' in file:
yes_path = root + '/' +file
im = cv2.imread(yes_path)
x1,y1 = 66,180
x2,y2 = 149,177
x3,y3 = 65,189
x4,y4 = 150,192
#缩放因子
scaleX = 0.6
scaleY = 0.6
cropped = im[y2:y4, x3:x4] # 裁剪坐标为[y0:y1, x0:x1]
im2 = cv2.resize(cropped, None, fx=scaleX * 20, fy=scaleY * 20, interpolation=cv2.INTER_LINEAR)
i = i + 1
#"/media/Data/2021_0313/test/"是本地存在的一个文件夹
dir = "/media/Data/2021_0313/test/" + file
cv2.imwrite(dir, im2)