import cv2
import numpy as np
import os
def find_max_region(mask_sel):
__, contours, hierarchy = cv2.findContours(mask_sel, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# 找到最大区域并填充
area = []
for j in range(len(contours)):
area.append(cv2.contourArea(contours[j]))
max_idx = np.argmax(area)
max_area = cv2.contourArea(contours[max_idx])
for k in range(len(contours)):
if k != max_idx:
cv2.fillPoly(mask_sel, [contours[k]], 0)
return mask_sel
# 全局阈值
def threshold_demo(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 254, 255, cv2.THRESH_BINARY)
return binary
if __name__ == "__main__":
for dir in os.listdir('/home/lixuan/fromLX/baojie'):
for file in os.listdir(os.path.join('/home/lixuan/fromLX/baojie',dir)):
path = os.path.join('/home/lixuan/fromLX/baojie',dir,file)
imgr = cv2.imread(path)
img = threshold_demo(imgr)
img = ~img
img = find_max_region(img)
ys,xs = np.where(img == 255)
x1 = min(xs)
y1 = min(ys)
x2 = max(xs)
y2 = max(ys)
im = imgr[y1:y2,x1:x2]
if not os.path.exists(os.path.join('/home/lixuan/fromLX/baojie2',dir)):
os.mkdir(os.path.join('/home/lixuan/fromLX/baojie2',dir))
cv2.imwrite(os.path.join('/home/lixuan/fromLX/baojie2',dir,file),im)
# cv2.rectangle(img,(x1,y1),(x2,y2),(255,255,255),2)
# cv2.namedWindow("input image", 0)
# cv2.imshow("input image", im)
# cv2.waitKey(0)
# cv2.destroyAllWindows()