2016-07-11 4 views
0

skeletonization을 위해 scikit-image 모듈을 사용하여 이미지를 skeletonize하고 싶습니다. 이 이미지는 OpenCV 라이브러리에 의해 사전 처리됩니다.OpenCV에서 변형 된 이미지를 scikit-image를 통해 처리 할 수 ​​없습니다.

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 
from skimage.morphology import skeletonize 
from skimage.viewer import ImageViewer 
img = cv2.imread('Feb_16-0.jpg',0) 
kernel = np.ones((1,1),np.uint8) 
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) 
blur = cv2.GaussianBlur(opening,(1,1),0) 
ret3,th4 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) 

내가 지금 원하는 : 이미지 'Feb_16-0.jpg'을 감안할 때, 나는 다음 가우시안 블러 적응 임계 사용 OpenCV의 파이썬을 적용 규모의 회색 이미지를 여는의 형태 변환을 수행하는 변환 scikit-image skimage.morphology.skeletonize를 사용하여 이미지를 골격화하는 것. OpenCV와 Python을 사용하여 이미지를 수동으로 skeletonize하기 위해 침식과 팽창을 수행하기위한 코드 작성을 시도했습니다. 그러나 이것은 매우 비효율적 인 처리 인 것으로 판명되었으므로이 시점에서 scikit 이미지 라이브러리로 전환하기로 결정했습니다. I 코드 사용 scikit 화상 모듈을 OpenCV 의해 전처리 NumPy와 배열을 전달할 때 :

skel = skeletonize(th4) 

와 동일한 결과를 보려고 I 오류 끝낼 :

Image contains values other than 0 and 1 

동일한 원인을 해석 할 수 없습니다. 아무도 친절 하게이 데이터 형식 오류를 해결하는 나를 도울 수 있습니까?

답변

1

를 참조하십시오.

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 
from skimage.morphology import skeletonize 
from skimage.viewer import ImageViewer 
img = cv2.imread('Feb_16-0.jpg',0) 
kernel = np.ones((1,1),np.uint8) 
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) 
blur = cv2.GaussianBlur(opening,(1,1),0) 
ret3,th4 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) 
th4[th4 == 255] = 1 
skel = skeletonize(th4) 
viewer = ImageViewer(skel) 
viewer.show() 
1

skeletonize()의 입력 행렬은 0/1 또는 True/False로 입력 할 때 이진이어야합니다. cv2.threshold()의 출력은 2 진수이지만 값은 0/255입니다. 0/1 형태로 TH4 행렬을 변환하려면 예를 들어 수행 할 수 있습니다 아래의 코드가 작동하는 경우

th4[th4 == 255] = 1

+0

안녕하십니까. 친절한 제안에 감사드립니다. 하지만 img 대신에 binarized input th4에서 유사한 오류가 발생합니다. th4는 임계 값 이진화 된 이미지입니다. –

+0

cv2.treshold()처럼 보이는 것은 255가 흰색이고 0은 검은 색 인 배열을 반환합니다. th4 행렬을 변환 할 수 있습니다. 내 소식을 수정하겠습니다. – user1337