Initial commit
This commit is contained in:
48
split03.py
Normal file
48
split03.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
from PIL import Image
|
||||
import os
|
||||
|
||||
def split_image_with_template(image_path, template_path, output_dir):
|
||||
"""
|
||||
根据拼图模板,将图片裁剪成拼图块。
|
||||
:param image_path: 输入图片路径
|
||||
:param template_path: 拼图模板路径
|
||||
:param output_dir: 输出拼图块保存目录
|
||||
"""
|
||||
# 加载图片和模板
|
||||
img = cv2.imread(image_path)
|
||||
template = cv2.imread(template_path, cv2.IMREAD_GRAYSCALE)
|
||||
|
||||
# 确保模板是二值化图像
|
||||
_, mask = cv2.threshold(template, 127, 255, cv2.THRESH_BINARY)
|
||||
|
||||
# 查找轮廓
|
||||
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
||||
|
||||
# 创建输出目录
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
# 裁剪每块拼图
|
||||
for i, contour in enumerate(contours):
|
||||
# 创建与原始图片相同大小的掩码
|
||||
piece_mask = np.zeros_like(mask)
|
||||
cv2.drawContours(piece_mask, [contour], -1, 255, thickness=-1)
|
||||
|
||||
# 裁剪区域
|
||||
x, y, w, h = cv2.boundingRect(contour)
|
||||
piece = cv2.bitwise_and(img, img, mask=piece_mask)
|
||||
piece_cropped = piece[y:y + h, x:x + w]
|
||||
|
||||
# 保存拼图块
|
||||
piece_path = os.path.join(output_dir, f"piece_{i}.png")
|
||||
cv2.imwrite(piece_path, piece_cropped)
|
||||
|
||||
print(f"拼图已生成,共 {len(contours)} 块,保存到:{output_dir}")
|
||||
|
||||
|
||||
# 示例调用
|
||||
image_path = "input.jpg" # 原始图片路径
|
||||
template_path = "mask.png" # 拼图模板路径
|
||||
output_dir = "output_jigsaw" # 输出路径
|
||||
split_image_with_template(image_path, template_path, output_dir)
|
||||
Reference in New Issue
Block a user