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设置tmpfs来加速项目的教程
Apr 17 Python
利用Python实现简单的相似图片搜索的教程
Apr 23 Python
Python中的推导式使用详解
Jun 03 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
python XlsxWriter模块创建aexcel表格的实例讲解
May 03 Python
django基于restframework的CBV封装详解
Aug 08 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
python3获取文件中url内容并下载代码实例
Dec 27 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
Django自定义YamlField实现过程解析
Nov 11 Python
Django实现翻页的示例代码
May 24 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 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
数据库相关问题
2006/10/09 PHP
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
IE中createElement需要注意的一个问题
2010/07/13 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
Python深入学习之装饰器
2014/08/31 Python
python中readline判断文件读取结束的方法
2014/11/08 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
python求质数的3种方法
2018/09/28 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
python如何求100以内的素数
2020/05/27 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
天游软件面试
2013/11/23 面试题
什么时候需要进行强制类型转换
2016/09/03 面试题
高中毕业自我鉴定
2013/12/13 职场文书
亲子活动总结
2014/04/26 职场文书
大学生读书笔记范文
2015/07/01 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js