먼저, 옷이 아닌 검은 지갑으로 윤곽선을 따내려 해보았다. 그런데 그림자가 함께 처리 되며, 뚜렷한 지갑의 형태로 인식되지 않았다. threshold 를 조정하는 트랙바가 필요해보였다.
흰배경의 흰 책도 마찬가지로 인식이 잘 되지 않았다.
두사진 모두 초록 점이 하나만 찍힌 것을 확인 할 수 있다.
그래서 먼저 노이즈 없애기를 통해 그림자를 없애고 좀 더 뚜렷한 형체를 추출해 내고자 했다.
kernel = np.ones((5,5), np.uint8)
에서 사이즈를 줄여가며 섬세하게 조정하였다.
바이너리 이미지의 트랙바를 생성하기 전, 움직이는 상태에서의 contour 처리가 다소 힘들 것이라 판단하였다. 그래서 웹캠을 연결하되, 그 화면 속 장면을 캡쳐하여 이미지로 저장하기로 했다.
import cv2 as cv
cam = cv.VideoCapture(0)
cv.namedWindow("capture")
img_counter = 0
while True:
ret, frame = cam.read()
cv.imshow("capture", frame)
if not ret:
break
k = cv.waitKey(1)
if k%256 == 27:
# ESC pressed
print("Closing")
break
elif k%256 == 32:
# SPACE pressed
img_name = "clothes_{}.png".format(img_counter)
cv.imwrite(img_name, frame)
print("{} written!".format(img_name))
img_counter += 1
cam.release()
cv.destroyAllWindows()
우선 집에 있는 구겨진 노란티로 테스트 해보았다. 성공적으로 캡쳐되어 폴더에 저장되는 것을 확인할 수 있었다.
캡쳐 후 저장된 옷 이미지로 바로 컨투어를 테스트 해 보았다. 트랙바를 조정해 가며 시도하였지만,
조명 탓인지 티셔츠가 그림자로 인해 어두운 부분을 제대로 인식하지 못하였고 컨투어 또한 제대로 되지 않았다.
좀 더 깔끔하게 인식된 손을 통해서도 마찬가지 였다.
불규칙한 조명때문에 엉뚱한 부분을 컨투어 하는 모습을 확인할 수 있다.
장소와 조명을 바꿀 수 없어 우선 인터넷에 올라오는 옷들의 사진을 가져와 진행하였다.
역시 조명의 차이 ..!!
제대로 인식되는 티셔츠 contour 를 확인할 수 있다.
티셔츠에 어울릴 만한 바지도 함께 contour 하였다.
이제 이것을 따로 추출해서 저장해야 한다.!
더 공부해 봐야겠지만 옷형태를 그대로 잘라 저장하는 것은 불가능해 보이고, 최소 경계를 구해 저장하여야 할 것 같다.
이런 식으로 ConvexHull을 잘 이용하여 잘라낼 수 있다.
자연스러운 합성이 이루어 지지 않을 수 있을 것 같지만,, 우선 해봐야할것 같다.