读取文件夹中的图片,使用opencv根据四个坐标点,对图像进行裁剪、缩放并保存到本地。或者对文件夹中的多张图片执行该操作,python、os.walk()

  • Post author:
  • Post category:python



一、单张图片

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)



版权声明:本文为baidu_41906969原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。