1. 程式人生 > 程式設計 >python 使用遞迴的方式實現語義圖片分割功能

python 使用遞迴的方式實現語義圖片分割功能

實現效果

在這裡插入圖片描述

第一張圖為原圖,其餘的圖為分割後的圖形

程式碼實現:

# -*-coding:utf-8-*-
import numpy as np
import cv2

#----------------------------------------------------------------------
def obj_clip(img,foreground,border):
  result = []
  height,width = np.shape(img)
  visited = set()
  for h in range(height):
    for w in range(width):
      if img[h,w] == foreground and not (h,w) in visited:
        obj = visit(img,height,width,h,w,visited,border)
        result.append(obj)
  return result
#----------------------------------------------------------------------
def visit(img,border):
  visited.add((h,w))
  result = [(h,w)]
  if w > 0 and not (h,w-1) in visited:
    if img[h,w-1] == foreground: 
      result += visit(img,w-1,border)
    elif border is not None and img[h,w-1] == border:
      result.append((h,w-1))
  if w < width-1 and not (h,w+1) in visited:
    if img[h,w+1] == foreground:
      result += visit(img,w+1,w+1] == border:
      result.append((h,w+1))
  if h > 0 and not (h-1,w) in visited:
    if img[h-1,w] == foreground:
      result += visit(img,h-1,border)
    elif border is not None and img[h-1,w] == border:
      result.append((h-1,w))
  if h < height-1 and not (h+1,w) in visited:
    if img[h+1,w] == foreground :
      result += visit(img,h+1,border) 
    elif border is not None and img[h+1,w] == border:
      result.append((h+1,w))
  return result
#----------------------------------------------------------------------
if __name__ == "__main__":
  import cv2
  import sys
  sys.setrecursionlimit(100000)
  img = np.zeros([400,400])
  cv2.rectangle(img,(10,10),(150,150),1.0,5)
  cv2.circle(img,(270,270),70,5)
  cv2.line(img,(100,0.5,5)
  #cv2.putText(img,"Martin",(200,200),5)
  cv2.imshow("img",img*255)
  cv2.waitKey(0)
  for obj in obj_clip(img,0.5):
    clip = np.zeros([400,400])
    for h,w in obj:
      clip[h,w] = 0.2
    cv2.imshow("aa",clip*255)
    cv2.waitKey(0)

總結

到此這篇關於python 使用遞迴的方式實現語義圖片分割的文章就介紹到這了,更多相關python 語義圖片分割內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!