关于初始种子自动选取的区域生长实例(python+opencv)


Posted in Python onJanuary 16, 2020

算法中,初始种子可自动选择(通过不同的划分可以得到不同的种子,可按照自己需要改进算法),图分别为原图(自己画了两笔为了分割成不同区域)、灰度图直方图、初始种子图、区域生长结果图。

另外,不管时初始种子选择还是区域生长,阈值选择很重要。

import cv2
import numpy as np
import matplotlib.pyplot as plt

#初始种子选择
def originalSeed(gray, th):
 ret, thresh = cv2.cv2.threshold(gray, th, 255, cv2.THRESH_BINARY)#二值图,种子区域(不同划分可获得不同种子)
 kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))#3×3结构元

 thresh_copy = thresh.copy() #复制thresh_A到thresh_copy
 thresh_B = np.zeros(gray.shape, np.uint8) #thresh_B大小与A相同,像素值为0

 seeds = [ ] #为了记录种子坐标

 #循环,直到thresh_copy中的像素值全部为0
 while thresh_copy.any():

  Xa_copy, Ya_copy = np.where(thresh_copy > 0) #thresh_A_copy中值为255的像素的坐标
  thresh_B[Xa_copy[0], Ya_copy[0]] = 255 #选取第一个点,并将thresh_B中对应像素值改为255

  #连通分量算法,先对thresh_B进行膨胀,再和thresh执行and操作(取交集)
  for i in range(200):
   dilation_B = cv2.dilate(thresh_B, kernel, iterations=1)
   thresh_B = cv2.bitwise_and(thresh, dilation_B)

  #取thresh_B值为255的像素坐标,并将thresh_copy中对应坐标像素值变为0
  Xb, Yb = np.where(thresh_B > 0)
  thresh_copy[Xb, Yb] = 0

  #循环,在thresh_B中只有一个像素点时停止
  while str(thresh_B.tolist()).count("255") > 1:
   thresh_B = cv2.erode(thresh_B, kernel, iterations=1) #腐蚀操作

  X_seed, Y_seed = np.where(thresh_B > 0) #取处种子坐标
  if X_seed.size > 0 and Y_seed.size > 0:
   seeds.append((X_seed[0], Y_seed[0]))#将种子坐标写入seeds
  thresh_B[Xb, Yb] = 0 #将thresh_B像素值置零
 return seeds

#区域生长
def regionGrow(gray, seeds, thresh, p):
 seedMark = np.zeros(gray.shape)
 #八邻域
 if p == 8:
  connection = [(-1, -1), (-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1), (0, -1)]
 elif p == 4:
  connection = [(-1, 0), (0, 1), (1, 0), (0, -1)]

 #seeds内无元素时候生长停止
 while len(seeds) != 0:
  #栈顶元素出栈
  pt = seeds.pop(0)
  for i in range(p):
   tmpX = pt[0] + connection[i][0]
   tmpY = pt[1] + connection[i][1]

   #检测边界点
   if tmpX < 0 or tmpY < 0 or tmpX >= gray.shape[0] or tmpY >= gray.shape[1]:
    continue

   if abs(int(gray[tmpX, tmpY]) - int(gray[pt])) < thresh and seedMark[tmpX, tmpY] == 0:
    seedMark[tmpX, tmpY] = 255
    seeds.append((tmpX, tmpY))
 return seedMark


path = "_rg.jpg"
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#hist = cv2.calcHist([gray], [0], None, [256], [0,256])#直方图

seeds = originalSeed(gray, th=253)
seedMark = regionGrow(gray, seeds, thresh=3, p=8)

#plt.plot(hist)
#plt.xlim([0, 256])
#plt.show()
cv2.imshow("seedMark", seedMark)
cv2.waitKey(0)

关于初始种子自动选取的区域生长实例(python+opencv)

关于初始种子自动选取的区域生长实例(python+opencv)

关于初始种子自动选取的区域生长实例(python+opencv)

关于初始种子自动选取的区域生长实例(python+opencv)

以上这篇关于初始种子自动选取的区域生长实例(python+opencv)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python与R语言的简要对比
Nov 14 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
深入了解Django中间件及其方法
Jul 26 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
Aug 30 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 Python
在python image 中实现安装中文字体
May 16 Python
Python接口测试环境搭建过程详解
Jun 29 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
Apr 21 Python
Python简单实现区域生长方式
Jan 16 #Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 #Python
Pycharm中Python环境配置常见问题解析
Jan 16 #Python
Python Numpy库常见用法入门教程
Jan 16 #Python
Python使用Pandas库常见操作详解
Jan 16 #Python
Python 日期的转换及计算的具体使用详解
Jan 16 #Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 #Python
You might like
用PHP读取RSS feed的代码
2008/08/01 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
[转]JS宝典学习笔记
2007/02/07 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
Angular路由简单学习
2016/12/26 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
Django重设Admin密码过程解析
2020/02/10 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
应届大专毕业生个人自荐信
2013/09/22 职场文书
小学科学教学反思
2014/01/26 职场文书
跳槽求职信范文
2014/05/26 职场文书
企业人事任命书
2014/06/05 职场文书
先进员工获奖感言
2014/08/14 职场文书
迎新生标语大全
2014/10/06 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
党性分析自查总结
2014/10/14 职场文书
电工实训报告总结
2014/11/05 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python