python 使用遞迴的方式實現語義圖片分割功能
阿新 • • 發佈:2020-07-19
實現效果
第一張圖為原圖,其餘的圖為分割後的圖形
程式碼實現:
# -*-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 語義圖片分割內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!