如何使用Python提取图片中的矩形区域?
使用Python提取图片中的矩形区域
要从指定图片中提取目标矩形区域,我们可以用OpenCV库快速实现,以下是具体步骤:
1. 安装依赖
首先确保安装了OpenCV和NumPy:
pip install opencv-python numpy
2. 手动指定坐标裁剪
如果已经知道矩形的精确坐标,可以直接编写代码裁剪:
import cv2 # 读取原始图片 img = cv2.imread("E9kVn.png") # 根据原始图和目标效果,定义矩形的左上角、右下角坐标 # 可通过画图工具打开图片,鼠标悬停获取坐标 x1, y1, x2, y2 = 235, 155, 765, 405 # 裁剪区域:OpenCV图像格式为[y_start:y_end, x_start:x_end] cropped_img = img[y1:y2, x1:x2] # 保存裁剪后的图片 cv2.imwrite("cropped_result.png", cropped_img) # 可选:查看效果 cv2.imshow("原始图", img) cv2.imshow("裁剪结果", cropped_img) cv2.waitKey(0) cv2.destroyAllWindows()
3. 交互式框选裁剪
如果不确定坐标,可以用交互式工具手动框选矩形:
import cv2 # 全局变量存储坐标和绘图状态 drawing = False x1, y1, x2, y2 = 0, 0, 0, 0 img_copy = None def select_rect(event, x, y, flags, param): global x1, y1, x2, y2, drawing, img_copy if event == cv2.EVENT_LBUTTONDOWN: # 按下左键开始框选 drawing = True x1, y1 = x, y img_copy = param.copy() elif event == cv2.EVENT_MOUSEMOVE: # 移动鼠标实时绘制矩形 if drawing: temp_img = img_copy.copy() cv2.rectangle(temp_img, (x1, y1), (x, y), (0, 255, 0), 2) cv2.imshow("框选区域", temp_img) elif event == cv2.EVENT_LBUTTONUP: # 松开左键结束框选 drawing = False x2, y2 = x, y cv2.rectangle(param, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.imshow("框选区域", param) # 读取图片并启动交互式窗口 img = cv2.imread("E9kVn.png") cv2.imshow("框选区域", img) cv2.setMouseCallback("框选区域", select_rect, img) cv2.waitKey(0) cv2.destroyAllWindows() # 裁剪并保存结果 cropped_img = img[y1:y2, x1:x2] cv2.imwrite("cropped_result.png", cropped_img)
运行这段代码后,在弹出的图片窗口中按住左键拖动即可框选目标区域,松开左键后程序会自动裁剪并保存结果。
内容的提问来源于stack exchange,提问作者李建敏
相关产品推荐
相关产品推荐

