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, foreground, border)
result.append(obj)
return result
#----------------------------------------------------------------------
def visit(img, height, width, h, w, visited, foreground, 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, height, width, h, w-1, visited , foreground, 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, height, width, h, w+1, visited, foreground, border)
elif border is not None and img[h, 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, height, width, h-1, w, visited, foreground, 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, height, width, h+1, w, visited, foreground, 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, 1.0, 5)
cv2.line(img, (100,10), (100,150), 0.5, 5)
#cv2.putText(img, "Martin",(200,200), 1.0, 5)
cv2.imshow("img", img*255)
cv2.waitKey(0)
for obj in obj_clip(img, 1.0, 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 의미 이미지 분할 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.