python进行批量图片自动识别区域进行裁剪
# -*- coding: utf-8 -*-import cv2
import numpy as np
import copy
import cv2 as cv
import os
def read_path(file_pathname):
# 遍历该目录下的所有图片文件
for filename in os.listdir(file_pathname):
src = cv.imread(file_pathname + '/' + filename)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
width = gray.shape[0] #图片行
height = gray.shape[1]#图片列
green_max = np.zeros(2) #一行两列0
green_min = np.zeros(2)
# print(green_max)
a_list = []
for i in range(width):
for j in range(height):
gray_value = gray, j]
if gray_value > 20:
a = np.array(, j])
a_list.append(a) #所有黑色区域坐标点
#print(a_list)
#print(a_list)
# 最大坐标
green_max = a_list[1]
for g, k in enumerate(a_list):
if k[0] > green_max[0]:
green_max[0] = int(k[0])
else:
green_max[0] = int(green_max[0])
if k[1] > green_max[1]:
green_max[1] = int(k[1])
else:
green_max[1] = int(green_max[1])
# print(green_max)
# 最小坐标
green_min = a_list[0]
# print(green_min)
for h, z in enumerate(a_list):
# print(green_min)
if z[0] < green_min[0]:
green_min[0] = z[0]
else:
green_min[0] = green_min[0]
if z[1] < green_min[1]:
green_min[1] = z[1]
else:
green_min[1] = green_min[1]
dst = src[int(green_min[0] - 80):int(green_max[0] + 60), int(green_min[1] - 60):int(green_max[1] + 60)]
# cv.imshow('gray', dst)
cv.imwrite('D:/Anaconda3/test7/cai09' + "/" + filename, dst)
read_path("09")
nuxingxp 发表于 2022-4-5 21:21
但是图1的大小分辨不固定的,可以吗?
已经三连
因为你的图片可能很多,所以应该只能调一个对所有图片差不都的状态,你可以看我调的参数尝试自己调一下;# 裁剪坐标为,这个坐标对应的是opencv下的坐标,就是上面的一行代码 Appled 发表于 2022-4-5 20:31
可以的,只需要调一下参
dst = src+130):int(green_max-400), int(green_min):int(green_max)]
我刚帮你调了一下参,把上面代码换一下就行
麻烦给个一件三连呀 手机截图健康码,楼主能指量裁剪多余部分不 nuxingxp 发表于 2022-4-4 14:31
手机截图健康码,楼主能指量裁剪多余部分不
只要多余部分的像素值和需要保存的像素值有区分应该是可以的
图1截剪为图2,可以不?代码该如何写?
nuxingxp 发表于 2022-4-4 16:02
图1截剪为图2,可以不?代码该如何写?
可以的,只需要调一下参 Appled 发表于 2022-4-5 20:35
dst = src+130):int(green_max-400), int(green_min):int(green_max)]
我刚帮你调了一下参 ...
但是图1的大小分辨不固定的,可以吗?
已经三连
谢谢分享! zm55555 发表于 2022-4-6 09:35
谢谢分享!
感谢您的肯定!