OpenCV | 프로젝트 1 : step1

박나연·2020년 8월 5일
0

2020summer

목록 보기
2/8
post-thumbnail

1 바이너리 이미지 처리 후 컨투어 추출하기

먼저, 옷이 아닌 검은 지갑으로 윤곽선을 따내려 해보았다. 그런데 그림자가 함께 처리 되며, 뚜렷한 지갑의 형태로 인식되지 않았다. threshold 를 조정하는 트랙바가 필요해보였다.

흰배경의 흰 책도 마찬가지로 인식이 잘 되지 않았다.

두사진 모두 초록 점이 하나만 찍힌 것을 확인 할 수 있다.

그래서 먼저 노이즈 없애기를 통해 그림자를 없애고 좀 더 뚜렷한 형체를 추출해 내고자 했다.

kernel = np.ones((5,5), np.uint8)

에서 사이즈를 줄여가며 섬세하게 조정하였다.


2 움직이는 웹캠에서 이미지로 캡쳐하여 저장하기

바이너리 이미지의 트랙바를 생성하기 전, 움직이는 상태에서의 contour 처리가 다소 힘들 것이라 판단하였다. 그래서 웹캠을 연결하되, 그 화면 속 장면을 캡쳐하여 이미지로 저장하기로 했다.

2-1 사용 코드

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()

우선 집에 있는 구겨진 노란티로 테스트 해보았다. 성공적으로 캡쳐되어 폴더에 저장되는 것을 확인할 수 있었다.


3 바이너리 이미지 트랙바로 조정하기

캡쳐 후 저장된 옷 이미지로 바로 컨투어를 테스트 해 보았다. 트랙바를 조정해 가며 시도하였지만,

조명 탓인지 티셔츠가 그림자로 인해 어두운 부분을 제대로 인식하지 못하였고 컨투어 또한 제대로 되지 않았다.

좀 더 깔끔하게 인식된 손을 통해서도 마찬가지 였다.

불규칙한 조명때문에 엉뚱한 부분을 컨투어 하는 모습을 확인할 수 있다.


4 판매되는 옷들의 이미지 가져오기

장소와 조명을 바꿀 수 없어 우선 인터넷에 올라오는 옷들의 사진을 가져와 진행하였다.

NERDY 타이다이 티셔츠

역시 조명의 차이 ..!!

제대로 인식되는 티셔츠 contour 를 확인할 수 있다.


디키즈 남성 바지

티셔츠에 어울릴 만한 바지도 함께 contour 하였다.


이제 이것을 따로 추출해서 저장해야 한다.!

5 ConvexHull

더 공부해 봐야겠지만 옷형태를 그대로 잘라 저장하는 것은 불가능해 보이고, 최소 경계를 구해 저장하여야 할 것 같다.

Convex Hull

이런 식으로 ConvexHull을 잘 이용하여 잘라낼 수 있다.

자연스러운 합성이 이루어 지지 않을 수 있을 것 같지만,, 우선 해봐야할것 같다.

6 작성 코드

웹캠 연결하기
바이너리 이미지 노이즈 제거
웹캠 이미지 캡쳐 저장
옷 형태 컨투어

profile
Data Science / Computer Vision

0개의 댓글