Python OpenCV 图片裁剪与行列提取实战:坐标切片详解
本文详解如何使用 Python 和 OpenCV 库对图像进行精确裁剪。通过 numpy 数组切片技术,演示如何根据 y1, y2, x1, x2 坐标提取矩形区域,以及如何单独提取指定行或列的数据。包含完整代码示例及参数说明,适用于图像预处理及特征提取场景。
OpenCV 图片裁剪基础
在 Python 中使用 OpenCV 进行图片裁剪是图像处理中的常见需求。OpenCV 读取图像后,图像数据以 NumPy 数组形式存储,这使得通过数组切片操作来提取特定区域变得非常高效和直观。
四坐标矩形区域裁剪
为了实现完整的矩形区域裁剪,我们需要定义四个关键坐标点。这些坐标决定了裁剪区域的边界。
import cv2
#裁剪图片路径input_path,四个裁剪坐标为:y1,y2,x1,x2,保存剪裁后的图片路径output_path
def cut_img(input_path,y1,y2,x1,x2,output_path):
#读图片cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道
img = cv2.imread(input_path,cv2.IMREAD_UNCHANGED)
#剪裁图片img中 y1到y2-1行,x1到x2-1列
out_img = img[y1:y2, x1:x2]
#保存裁剪后的图片
cv2.imwrite(output_path, out_img)
#显示图片
cv2.imshow('img:', img)
cv2.imshow('output_img:', out_img)
#等待,以免图片窗口关闭
cv2.waitKey(0)
if __name__ == '__main__':
cut_img('1.jpg',50,300,100,400,'2.jpg')
基于上述四个坐标,我们可以对原始图像进行裁剪,并保存结果。

矩形裁剪代码实现
以下是实现四坐标矩形裁剪的具体 Python 代码。该函数接收输入路径、四个坐标值(y1, y2, x1, x2)以及输出路径。
import cv2
#裁剪图片路径input_path,裁剪坐标为:y1,y2,保存剪裁后的图片路径output_path
def cut_img(input_path,y1,y2,output_path):
#读图片cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道
img = cv2.imread(input_path,cv2.IMREAD_UNCHANGED)
#剪裁图片
out_img = img[y1:y2]
#或者下面这行也是一样
#out_img = img[range(y1,y2+1)]
#保存裁剪后的图片
cv2.imwrite(output_path, out_img)
#显示图片
cv2.imshow('img:', img)
cv2.imshow('output_img:', out_img)
#等待,以免图片窗口关闭
cv2.waitKey(0)
if __name__ == '__main__':
cut_img('1.jpg',100,200,'2.jpg')
运行上述代码后,可以看到原始图像与裁剪后图像的对比效果。

Y轴方向裁剪(垂直条带)
如果只需要沿 y 轴方向进行裁剪,即保留特定的行范围,而保持所有列不变,可以使用简化的坐标参数。
import cv2
#裁剪图片路径input_path,四个裁剪坐标为:x1,x2,保存剪裁后的图片路径output_path
def cut_img(input_path,x1,x2,output_path):
#读图片cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道
img = cv2.imread(input_path,cv2.IMREAD_UNCHANGED)
#剪裁图片
out_img = img[:,x1:x2]
#或者下面这行也是一样
#out_img = img[:,range(x1,x2+1)]
#保存裁剪后的图片
cv2.imwrite(output_path, out_img)
#显示图片
cv2.imshow('img:', img)
cv2.imshow('output_img:', out_img)
#等待,以免图片窗口关闭
cv2.waitKey(0)
if __name__ == '__main__':
cut_img('1.jpg',150,350,'2.jpg')
以下是仅指定 y 轴坐标进行裁剪的代码实现。这种方式适用于需要截取图像特定高度条带的场景。

提取指定行数据
当需要提取图像中的某一行(即单行数据)时,可以通过指定起始行号 y 来实现。
import cv2
#裁剪图片路径input_path,裁剪坐标为:y,保存剪裁后的图片路径output_path
def cut_img(input_path,y,output_path):
#读图片cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道
img = cv2.imread(input_path,cv2.IMREAD_UNCHANGED)
#剪裁图片
out_img = img[y:y+1]
#保存裁剪后的图片
cv2.imwrite(output_path, out_img)
#显示图片
cv2.imshow('img:', img)
cv2.imshow('output_img:', out_img)
#等待,以免图片窗口关闭
cv2.waitKey(0)
if __name__ == '__main__':
cut_img('1.jpg',100,'2.jpg')

单行提取代码示例
提取指定行的代码如下。注意,这里使用 y:y+1 来确保返回的是二维数组结构,便于后续处理。
import cv2
#裁剪图片路径input_path,裁剪坐标为:x,保存剪裁后的图片路径output_path
def cut_img(input_path,x,output_path):
#读图片cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道
img = cv2.imread(input_path,cv2.IMREAD_UNCHANGED)
#剪裁图片
out_img = img[:,x:x+1]
#保存裁剪后的图片
cv2.imwrite(output_path, out_img)
#显示图片
cv2.imshow('img:', img)
cv2.imshow('output_img:', out_img)
#等待,以免图片窗口关闭
cv2.waitKey(0)
if __name__ == '__main__':
cut_img('1.jpg',100,'2.jpg')
总结而言,OpenCV 结合 NumPy 切片提供了灵活的图像裁剪方案。无论是矩形区域、垂直条带还是单行数据,都可以通过调整切片索引轻松实现。
以上介绍了使用 Python 和 OpenCV 进行图片裁剪及行列提取的方法。希望这些内容能帮助您解决图像处理中的相关问题。如有任何疑问,欢迎留言交流。感谢支持!如果您觉得本文有用,欢迎转载,请注明出处。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













