Python图像裁剪与原图坐标映射
在Python图像处理中,经常需要裁剪图像并把裁剪后图像的坐标映射回原始图像坐标。本文将详细讲解如何使用Python进行图像裁剪以及如何将裁剪图像坐标转换回原始图像坐标。
假设有一张1000x1000像素的图像,需要将其分割成多个小图进行处理,并在其中一个小图上绘制矩形。矩形坐标系是小图的局部坐标系,需要将其转换到原始图像的全局坐标系。
可以使用OpenCV或Pillow库进行图像裁剪。OpenCV使用NumPy数组表示图像,可以直接使用NumPy切片进行裁剪,例如img[y1:y2, x1:x2].copy()可以裁剪出(x1, y1)到(x2, y2)区域的图像。 如果需要平均分割图像,可以使用np.hsplit和np.vsplit函数(前提是图像宽高能被分割数整除),否则可以使用np.array_split函数,该函数会处理无法整除的情况。
以下代码片段演示了如何使用OpenCV进行图像裁剪和坐标转换:
import cv2 import numpy as np # ... (加载图像代码,此处省略)... h, w = img.shape[:2] nRows, nCols = 4, 4 sub_h, sub_w = h // nRows, w // nCols # 分割图像 sub_imgs = np.array(np.hsplit(np.array(np.hsplit(img, nCols)), nRows)) # 在子图(r,c)中(x1,y1)到(x2,y2)绘制矩形 r, c, x1, y1, x2, y2 = 2, 3, 10, 20, 54, 44 sub_imgs[r, c, y1:y2, x1:x2] = (0, 0, 255) # 将子图坐标转换为原图坐标 x1_original = sub_w * c + x1 y1_original = sub_h * r + y1 x2_original = sub_w * c + x2 y2_original = sub_h * r + y2 # 在原图上绘制矩形 img[y1_original:y2_original, x1_original:x2_original] = (0, 0, 255) # ... (显示图像代码,此处省略)...
代码中,图像被分割成4x4个子图,然后在一个子图上绘制矩形。关键是子图坐标到原图坐标的转换:原图坐标等于子图坐标加上子图在原图中的起始坐标。
Pillow库也提供crop方法进行图像裁剪,用法与OpenCV类似,但Pillow库更擅长图像处理的其他操作,例如图像格式转换和图像滤镜。 使用Pillow进行图像裁剪和坐标变换的代码示例需要根据具体的分割函数逻辑进行坐标转换,以处理图像无法整除的情况。
通过以上方法,可以方便地进行图像裁剪,并准确地将裁剪后图像坐标转换回原图坐标,从而在原图上进行后续处理和分析。
以上就是Python图片裁剪后如何将局部坐标转换为原图坐标?的详细内容,更多请关注知识资源分享宝库其它相关文章!
版权声明
本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com
发表评论