关于初始种子自动选取的区域生长实例(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翻译软件实现代码(使用google api完成)
Nov 26 Python
python实现批量监控网站
Sep 09 Python
python requests使用socks5的例子
Jul 25 Python
python中使用while循环的实例
Aug 05 Python
Python性能分析工具Profile使用实例
Nov 19 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
python连接PostgreSQL过程解析
Feb 09 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
13个Pandas实用技巧,助你提高开发效率
Aug 19 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 Python
Python Django项目和应用的创建详解
Nov 27 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中单引号与双引号的区别分析
2014/08/19 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
js实现无缝循环滚动
2020/06/23 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
js实现表格筛选功能
2017/01/18 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
python对数组进行反转的方法
2015/05/20 Python
python使用opencv读取图片的实例
2017/08/17 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
2019/06/27 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
自我评价如何写好?
2014/01/05 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
四风自我剖析材料
2014/09/30 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
小学音乐课教学反思
2016/02/18 职场文书
接收函
2019/04/22 职场文书
关于感恩的作文
2019/08/26 职场文书
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL