python用opencv完成图像分割并进行目标物的提取


Posted in Python onMay 25, 2020

运行平台: Windows
Python版本: Python3.x
IDE: Spyder
今天我们想实现的功能是对单个目标图片的提取如图所示:

python用opencv完成图像分割并进行目标物的提取

图片读取

###############头文件
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,在进行边缘提取的时候要把图像处理为二值图像,这里要说明一下,不同版本的opencv,cv2.findContours输出的值不同,有两个有三个,我们这个opencv版本输出为两个。
coontours为所有边界点的集合,是一个list,我们图中有三个区域,所以len(list)=3,每一个list里包含边界值数据。

图片提取

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 相关文章推荐
Python中的自定义函数学习笔记
Sep 23 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
python pandas生成时间列表
Jun 29 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
Jul 19 Python
python爬虫-模拟微博登录功能
Sep 12 Python
Python的pygame安装教程详解
Feb 10 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
Pytorch转tflite方式
May 25 #Python
Python HTMLTestRunner库安装过程解析
May 25 #Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 #Python
5行Python代码实现图像分割的步骤详解
May 25 #Python
Win10用vscode打开anaconda环境中的python出错问题的解决
May 25 #Python
keras .h5转移动端的.tflite文件实现方式
May 25 #Python
Python虚拟环境venv用法详解
May 25 #Python
You might like
PHP+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
js 页面输出值
2008/11/30 Javascript
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
python分割文件的常用方法
2014/11/01 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
Python绘制动态水球图过程详解
2020/06/03 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
渗透攻击的测试步骤
2014/06/07 面试题
小学红领巾中秋节广播稿
2014/01/13 职场文书
医学院毕业生自荐信范文
2014/03/06 职场文书
党支部承诺书范文
2014/03/28 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
个园导游词
2015/02/04 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis