Python OpenCV 图片裁剪与行列提取实战:坐标切片详解

七月
七月
发布时间:2026-10-13| 6人浏览过
原创

本文详解如何使用 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 进行图片裁剪及行列提取的方法。希望这些内容能帮助您解决图像处理中的相关问题。如有任何疑问,欢迎留言交流。感谢支持!如果您觉得本文有用,欢迎转载,请注明出处。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。