python+opencv实现连通区域分离

  步骤:

  1.扫描整幅图像,判断当前像素点是前景点同时还未打上标签,将该像素点入栈。

  (1)将当前栈中top元素出栈,通过4邻域判断(也需要同时满足是前景点未打上标签)进行元素入栈,同时对入栈的元素打上标签。

  (2) 重复(1)中的操作,直到栈表为空,退出当前循环,至此一个连通域的标签打完。

  2.重复1中的所有操作。

  代码部分

  def Connected_Separation(image):

  image_shape = image.shape

  rows = image_shape[0]

  cols = image_shape[1]

  index_map = np.zeros((rows, cols))

  label = 1

  for row in range(rows):

  for col in range(cols):

  # 扫描当前像素为前景且没有被访问过,将其入栈

  if image[row][col] == 1 and index_map[row][col] == 0:

  # 创建新站

  s = []

  # 入栈

  s.append((row, col))

  # 我们将(row,col)赋予一个label值

  index_map[row][col] = label

  # 循环判断4连通域是否与这个(row,col)相连,如果相连进行入栈操作,如果这个栈不为空

  while (len(s) != 0):

  # 出栈,判断出栈元素的4领域

  a = s.pop()

  # 这边出栈的元素是不是还得赋予一个值

  # 判断,可以入栈的元素,但是我还需要判断这个栈里面是否有这个元素,如果存在这个元素,那么就不能入栈

  p=[]

  p.append((a[0],a[1]-1 if a[1]-1>0 else 0))

  p.append((a[0],a[1]+1 if a[1]+1

  p.append((a[0]-1 if a[0]-1>0 else 0,a[1]))

  p.append((a[0]+1 if a[0]+1

  # 判断栈里面是否以已经存在需要入栈的元素

  for i in range(4):枣庄妇科医院哪家好 http://mobile.0632dffk.com/

  if image[p[i][0],p[i][1]] == 1 and index_map[p[i][0],p[i][1]] == 0:

  s.append(p[i])

  index_map[p[i][0], p[i][1]] = label

  # 当栈里面的元素全部出去之后,我们的while就结束

  if len(s) == 0:

  label += 1

  break

  return index_map

  if __name__ == '__main__':

  image = cv2.imread('../imgs/2.jpg', 0)

  # 进行二值化

  ret1, th1 = cv2.threshold(image, 0, 255, cv2.THRESH_OTSU) # 也就是大于0的都写出255

  # 翻转

  image = 1 - th1 / 255

  kernel = np.ones((2, 2))

  # 孔洞填补(闭运算)

  image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel=kernel)

  index_map =Connected_Separation(image)

  plt.imshow(image, plt.cm.gray)

  plt.show()

©著作权归作者所有:来自51CTO博客作者ckllf的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Java技巧分享:判断字符串是否为空常的三种方法
  2. 前端vue面试题大全
  3. html+css基础入门教程篇之伪元素
  4. 单位em和rem区别,box-sizing定义边界,VW和VH,字体图标,定位原理
  5. 第四课 box-sizing功能示例、相对定位与绝对定位的区别与联系
  6. box-sizing功能、相对定位与绝对定位
  7. 选择器优先级、模块化样式组件、伪类选择器
  8. 1. 实例演示box-sizing属性; 2. 实例演示常用的元素居中方式
  9. 使用C语言判断密码是否正确,三次失败就退出,超详细教程!!

随机推荐

  1. Android图像开源视图:SmartImageView
  2. android ImageView android:adjustViewBo
  3. 系出名门Android(7) - 控件(View)之ZoomC
  4. Android中Parcelable接口的使用
  5. Android gdb调试
  6. ndk下使用sqlite
  7. Android Handler 消息机制原理解析
  8. android 2.3 r1 中文 api (58) —— TabH
  9. Android Handler机制1--ThreadLocal
  10. [入门八]Android的应用程序框架