关于初始种子自动选取的区域生长实例(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统计文件行数示例分享
Feb 21 Python
Python下线程之间的共享和释放示例
May 04 Python
Python读写ini文件的方法
May 28 Python
python模拟事件触发机制详解
Jan 19 Python
Python实现在某个数组中查找一个值的算法示例
Jun 27 Python
python读取和保存图片5种方法对比
Sep 12 Python
python bmp转换为jpg 并删除原图的方法
Oct 25 Python
简单了解python单例模式的几种写法
Jul 01 Python
简单了解django索引的相关知识
Jul 17 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 Python
Python实战之OpenCV实现猫脸检测
Jun 26 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使用parse_url和parse_str解析URL
2015/02/22 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
python机器学习实战之K均值聚类
2017/12/20 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
Pytorch的mean和std调查实例
2020/01/02 Python
Python configparser模块操作代码实例
2020/06/08 Python
Python常用外部指令执行代码实例
2020/11/05 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
百度JavaScript笔试题
2015/01/15 面试题
母亲七十大寿答谢词
2014/01/18 职场文书
晚归检讨书
2014/02/19 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
单位工作证明
2014/10/07 职场文书
2014年计生工作总结
2014/11/21 职场文书
党委工作总结2015
2015/04/27 职场文书
六年级语文教学反思
2016/03/03 职场文书
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电