crop.py 963 B

1234567891011121314151617181920212223242526
  1. import cv2
  2. import numpy as np
  3. def crop_img(image: "np.ndarray") -> "np.ndarray":
  4. gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # noqa 将图像转换为灰度图像
  5. _, threshold = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY) # noqa 换为二值图像 => save: [150,255]
  6. contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # noqa 查找轮廓
  7. max_contour = max(contours, key=cv2.contourArea) # noqa 找到最大的轮廓
  8. rect = cv2.minAreaRect(max_contour) # noqa 计算最小外接矩形
  9. box = cv2.boxPoints(rect) # noqa 获取矩形的四个角点
  10. box = np.intp(box)
  11. # 裁剪图像
  12. return image[min(box[:, 1]):max(box[:, 1]), min(box[:, 0]):max(box[:, 0])]
  13. def main():
  14. path = "img/11.jpg"
  15. cropped = crop_img(cv2.imread(path)) # noqa
  16. print(cropped.shape)
  17. cv2.imshow("cropped", cropped) # noqa
  18. cv2.waitKey(0) # noqa
  19. if __name__ == '__main__':
  20. main()