일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- js코테
- 백준구현문제
- 자바스크립트
- 백준알고리즘
- 코테
- 백준js
- 리액트댓글기능
- HTML
- 리액트
- 몽고DB
- CSS
- 익스프레스
- HTML5
- 백준
- 포이마웹
- 백준nodejs
- 안드로이드 스튜디오
- 프로그래머스JS
- JS프로그래머스
- 알고리즘
- JS
- 코딩테스트
- 리액트커뮤니티
- dp알고리즘
- 백준구현
- 프로그래머스코테
- 다이나믹프로그래밍
- css기초
- 백준골드
- 프로그래머스
- Today
- Total
개발새발 로그
OPENCV와 K-MEANS CLUSTERING을 이용한 상 하의 색상 매칭-1 본문
파이썬 첫 프로젝트~
파이썬을 이용해 상의와 하의의 색상을 추출하여
톤온톤과 톤인톤을 매칭하는 프로그램을 만들어보겠습니다!
먼저 알아야할 것은?
- 톤온톤 톤인톤이란?
톤온톤은 옷 색상의 색은 같지만 톤이 다른 코디를 의미하고,
톤인톤은 옷 색상의 톤은 같지만 색이 다른 코디를 의미합니다.
사진으로 쉽게 보여드릴게요!
이해되셨나요??
이렇게 보면 아주 쉬워 보이지만 옷의 코디의 요소중 중요한 요소입니다!
사실 좋은 패션(코디)에 있어서 중요한 요소는 많습니다.
색상 매칭은 그 중 하나인데요!
그렇지만 저희 눈으로는 톤인톤이나 톤온톤은 매칭 하기 쉽지 않습니다...
가끔 옷을 살때 파스텔 톤을 사면 뭔가 자연스럽지 않은 것처럼요!
이럴 때 컴퓨터 비전을 활용하여 매칭 하면 어떨까요?!
- OPENCV
OPENCV는 파이썬에서 지원하는 실시간 이미지 프로세싱 라이브러리인데요!
쉽게 말하면 이미지나 동영상을 컴퓨터를 통해 불러올 수 있도록 해주는 라이브러리입니다!
저는 상의 또는 하의가 저장되어있는 프로그램에
매칭 하고 싶은 상의 또는 하의를 넣어 해당 의류에 맞는 톤온톤과 톤인톤을 보여주도록 할 건데요!
그렇다면 OPENCV는 필수입니다!
- COLORSYS
만약 OPENCV로 옷을 컴퓨터로 띄우는 데 성공했다면?
이제 옷의 색상을 추출해 내야겠죠?
COLORSYS라는 라이브러리를 사용할 것입니다!
COLORSYS는 컴퓨터 모니터에서 사용되는 RGB 색공간과 다른 좌표계 YIQ, HLS, HSV로 표현된 석간 양방향 색 변환을 정의합니다.
하지만 이러한 색공간 좌표 변환 값은 부동소수점 값입니다. 단순히 COLORSYS를 이용해서 색변환만 하는 게 아니겠죠?
- K-means clustering
가장 중요한 K-means clustering입니다!
K-평균 알고리즘이라고도 하는데요!
주어진 데이터를 k개의 클러스터로 묶는 알고리즘입니다.
k개의 임의의 중심점을 배치하고,
각 데이터들을 가장 가까운 중심점으로 할당하여 군집을 형성합니다.
군집으로 지정된 데이터들을 기반으로 해당 군집의 중심점을 계속해서 업데이트합니다.
이렇게 더 이상 중심점이 업데이트되지 않을 때까지 반복하는 것입니다!
그렇게 되면 어떤 데이터가 들어와도 그게 어떤 군집에 속하는지 알 수 있게 되는 것인데요
이러한 형식으로 만약 옷에서 색상이 하나만 나오지 않겠죠?
색상 값은 픽셀 별로 구하기 때문에 그 수가 상당합니다. 그 픽셀 값을 색상들이 다 같다고 확정 지을 수도 없습니다.
그러므로 거기에 알맞은 K-means clusterung을 사용하여
옷의 주된 색상을 추출하고
그중 가장 많이 차지하는 색깔을 중심으로
다른 의류와 매칭 하도록 할 것입니다!
- HSV값의 알고리즘 형성
다음으로 중요한 부분입니다!
옷의 이미지도 띄웠고 색상도 추출했으면 어떻게 하면 될까요?
이제 옷의 톤온톤과 톤인톤을 확인할 차례입니다!
옷의 톤이나 색상을 표현함에 있어서 편리하겠다고 생각된 것이 바로 HSV값인데요!
HSV는 바로 이렇게 색상 채도 명도로 나뉘어 있어 톤온톤과 톤인톤을 매칭 하기에 쉽다고 생각되었습니다.
톤온톤과 톤인톤 말 그대로 명도와 채도로 나뉘기 때문입니다!
사실.. 인터넷에 RGB 값이라던지 HSV값이라던지 사용하시는 분들이 많이 안 계시더라고요..
그래서 어떻게 할지 고민 많이 해보았지만! HSV가 편하다고 생각되었습니다!
RGB로도 가능할 것 같아요!
그렇다면 RGB 값과 HSV값이 어떻게 표현되는지 알아봐야겠죠??
제가 직접 만든 표입니다!
이게 정말 어려웠던 곳입니다...
이렇게 표를 만들어서 보는 게 쉬웠다고 생각되었습니다!
HSV값이 톤에 따라 어떻게, 규칙적으로 바뀌는지 알아야 하는데요!
유채색 같은 경우는 눈으로 봐도 규칙적으로 변하고 있는데 무채색 같은 경우는 다릅니다
HSV에서는 위에서 보았듯이 원기둥 또는 원뿔 형태로 되어있는데요!
그래서 H(색상) 값이 아무리 커도 S(채도), V(명도)가 없다면 그냥 검은색이 될 뿐입니다!
S와 V 값도 마찬가지입니다
둘 다 어느 정도의 값이 있어야 눈으로 보았을 때 식별 가능한 색이 되는데요
어려웠던 점은 예를 들어서 분명 초록색인데... 카키색 하고는 값이 많이 차이나더라고요..
또 무채색은 유채색과 규칙적인 부분이 없어서 완전히 다른 알고리즘으로 만들어야 했습니다!
하지만 어떻게든 찾아내야겠죠?
먼저 무채색은 H와 S가 0이고 V의 값에 변화에 검은색에서 명도만 변하게 됩니다!
V가 100이면 흰색이 되는 거죠!
하지만 여기서 H에 무슨 값이 들어가도 색은 똑같더라고요..
또한 S의 값은 10 이상이 되면 육안으로 보았을 때 다른 색으로 변화하게 됩니다!
그래서 조건을 많이 달아야 하겠죠?
이 설명은 다음 포스팅에서 설명하겠습니다!
이렇게 먼저 시작점을 다져보았습니다!
먼저 무엇이 필요한지
이 프로그램이 가동 가능한지
알고리즘이 명확한지
이런 게 정말 중요한 것 같더라고요..
매일 그냥 "아 이거 할까?"로 하면 중간에 막히게 되고, 생각한 것처럼 되지 않더라고요..
구상은 필수인 것 같습니다!
첫 개발 포스팅이라 초보티 팍팍 나지만...
재미있게 봐주시면 감사하겠습니다!
그럼 다음 포스팅에서 뵐게요~
'파이썬' 카테고리의 다른 글
OPENCV와 K-MEANS CLUSTERING을 이용한 상 하의 색상 매칭-5 (0) | 2021.12.22 |
---|---|
OPENCV와 K-MEANS CLUSTERING을 이용한 상 하의 색상 매칭-4 (0) | 2021.12.19 |
파이썬 VS_CODE 처음 설치 후 환경 설정하기(파이썬 오류) (0) | 2021.12.19 |
OPENCV와 K-MEANS CLUSTERING을 이용한 상 하의 색상 매칭-3 (0) | 2021.11.08 |
OPENCV와 K-MEANS CLUSTERING을 이용한 상 하의 색상 매칭-2 (0) | 2021.11.08 |