Python OpenCV实现图像分割与目标物提取实战

月亮慢半拍
月亮慢半拍
发布时间:2026-10-13| 5人浏览过
原创

本文介绍如何使用Python和OpenCV库完成图像分割及目标物提取。通过读取图片、灰度化与二值化处理,利用cv2.findContours提取边界轮廓。随后结合cv2.pointPolygonTest判断像素点位置,在黑色底板上精准提取目标区域并保存结果,适用于Windows平台下的Spyder环境开发。

环境配置与目标概述

本教程的运行环境为Windows系统,使用Python3.x版本,开发工具选用Spyder IDE。主要目标是实现从单张背景图片中精确提取特定目标物,具体效果如图所示:

图片读取

图像读取与预处理


###############头文件
import matplotlib.pyplot as plt
import os
import cv2
import numpy as np
from PIL import Image
#from skimage import io
import random
from PIL import Image

首先需要完成图片的读取操作,并通过cv2.imshow函数进行显示验证。


img = cv2.imread("1_3img.png")############图片读取
#cv2.imshow('picture', img) 
#cv2.waitKey(0)
pictue_size=img.shape
picture_height=pictue_size[0]
picture_width=pictue_size[1]

边界提取

二值化与边界提取


################灰度化,以及二值化
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,1,255,cv2.THRESH_BINARY) 
############################

######################边界提取,contours包含边界值的坐标
contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) 

边界提取主要采用cv2.findContours函数。在执行边缘提取前,需将图像转换为二值图像。需要注意的是,不同版本的Open库中cv2.findContours函数的返回值数量存在差异,可能返回两个或三个值,本文所用版本仅返回两个值。变量contours存储了所有边界点的集合,类型为list。由于图中包含三个独立区域,因此len(contours)的结果为3,每个列表元素内均包含对应的边界数据。

图片提取

基于轮廓的目标物提取


img2=[0 for i in range(len(contours))]
print(len(contours))
for i in range(len(contours)):
  img2[i]=cv2.imread("./blackboard/test.jpg")############黑色底板图片读取
  print(img2[i].shape)
#  cv2.drawContours(img2[i],contours[i],-1,(0,0,255),3) #########画边界 
  ###############全图片遍历找到相应的在轮廓之内的点
  for a in range(picture_height):
    for b in range(picture_width):
      #############################################辨别是否在轮廓内是定义为1,不是定义为-1
      result = cv2.pointPolygonTest(contours[i], (a,b), False)
      if result>0:
        img2[i][b,a]=100
  ##############下面填写保存代码
  scipy.misc.imsave('picture'+str(i)+'.jpg',img2[i])

首先读取一张全黑色的底版图片,其所有像素值初始为0。接着利用cv2.pointPolygonTest函数分析各个像素点是否位于边界区域内:若点在边界内则返回1,否则返回-1。对于判定在区域内的点,将其像素值赋为100并保存,最终即可得到提取后的目标图片。

至此,关于使用Python和OpenCV完成图像分割并提取目标物的教程介绍完毕。如需了解更多相关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 算法库。