原圖尺寸:3000X3000

裁剪後的圖檔尺寸:1000X1000
一、運作代碼命名為 cut.py
二、1.jpg 是需要進行裁剪的圖檔
三、Cut 檔案夾儲存按裁剪順序重新命名的圖檔
完整代碼
import cv2
import glob
import sys
import os
import numpy as np
#儲存切割的左上角坐标
def all_dot(w,h,new_w,new_h):
if w % new_w !=0 or h % new_h != 0:
print("原圖無法充分裁剪")
sys.exit()#退出程式
dot_list=[]#儲存裁剪圖的左上角坐标
x = int(w/new_w) #縱切
y = int(h/new_h) #橫切
[x1,y1]=[0,0]#從原圖左上角開始
for k in range(int(x*y)):
dot_list.append([x1,y1])
x1 = x1 + new_w
if (k+1) % x == 0:
x1 = 0
y1 = y1 + new_h
print("一共可以裁成%d張寬為%d,長為%d的圖"%(len(dot_list),new_w,new_h))
print(dot_list)
return dot_list
def plot_rectangle(img_dir,new_w,new_h,count):
img = cv2.imread(img_dir,cv2.IMREAD_COLOR)#按彩色圖讀入
w=img.shape[1]
h=img.shape[0]
print("原圖寬為%d,高為%d"%(w,h),'\n')
dots = all_dot(w,h,new_w,new_h)
for i in range(len(dots)):#可以生成的圖檔數量
x0=dots[i][0]
y0=dots[i][1]
x1=dots[i][0]+new_w
y1=dots[i][1]+new_h
cut_save_image(img,x0,y0,x1,y1, count+i)#顯示裁剪框注釋這一行
#img表示圖像,兩坐标分别左上(x0,y0)、右下坐标(x1,y1),(0,0,255)為顔色,2為框粗
#cv2.rectangle(img,(dots[i][0],dots[i][1]),(dots[i][0]+new_w,dots[i][1]+new_h),(0,255,255), 2)#開始裁剪注釋這一行
#cut_save_image(img,x0,y0,x1,y1, count+i)
cv2.imshow('tx',img)
cv2.waitKey(5000)
cv2.destroyAllWindows()
def cut_save_image(img,x0,y0,x1,y1,k):
cut_img = img[y0:y1,x0:x1]
#儲存裁剪後圖檔的路徑
cv2.imwrite("C:/Users/Chengguo/Desktop/Cut/%08d.jpg"%k,cut_img,[100])#[100]完整寫入
def main():
count=0
#被裁剪圖檔的路徑
imgpath='C:/Users/Chengguo/Desktop/'
for jpgfile in glob.glob(imgpath+"*.jpg"):#傳回所有比對的圖檔路徑清單
print(jpgfile)
plot_rectangle(jpgfile,1000,1000,count)
count=count+12
print("\n","一共%d張圖檔"%count)
if __name__== '__main__':
main()