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

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

本文介绍如何使用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 相关产品和应用

全部下载

专题列表