일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HTML5
- 리액트댓글기능
- 안드로이드 스튜디오
- JS프로그래머스
- 프로그래머스
- CSS
- 코테
- HTML
- 알고리즘
- 백준
- 포이마웹
- 프로그래머스JS
- 백준nodejs
- 백준구현
- dp알고리즘
- 프로그래머스코테
- 백준골드
- css기초
- 리액트커뮤니티
- JS
- 몽고DB
- js코테
- 자바스크립트
- 백준알고리즘
- 백준구현문제
- 다이나믹프로그래밍
- 코딩테스트
- 백준js
- 익스프레스
- 리액트
- Today
- Total
개발새발 로그
OPENCV와 K-MEANS CLUSTERING을 이용한 상 하의 색상 매칭-3 본문
안녕하세요~
오늘은 본격적으로 톤온톤 톤인톤을 매칭 하는 프로그램을 만들어볼게요!
저는 어떤 프로그램을 만들때 다른 분들이 만든 것을 보고 공부하면서 배웁니다.
구글링을 엄청엄청 하는데
이거 나중에 많이 써먹습니다.. 다른 거 베끼면서 하는 것은 좋을 수도 있고 안 좋을 수도 있지만
그렇게 검색하면서 나중에는 검색스킬이 오르는 거니까요!
이 코드는 인터넷에서 보고 제가 제 입맛대로 고친 코드인데요
많이 야매스러운(?) 부분이 없지않아 있을 거예요!
하지만 감수하고 봐주세요...!
코드가 조금 긴 관계로 존재하는 많은 함수들은 일단 제쳐두고!
실행되는 부분만 먼저 설명할게요
그만큼 함수 부분이 많이 중요해서 더 자세하게 적으면서 공부하면 좋을 거 같다고 생각됩니다!
import numpy as np
import cv2
import matplotlib.image as mpimg
from matplotlib import pyplot as plt
from scipy.sparse import base
from sklearn.cluster import KMeans
import re
import colorsys
#----함수부분 생략-----
#-----------------------------체크하는 의류(상의)--------------------------------------
chkimg = "img/up1.jpg"
image = mpimg.imread(chkimg)
plt.imshow(image)
maxcolor1=image_color_cluster(chkimg,True) #TRUE는 해당 bar를 보여주게끔한다.밑에서는 생략하려고 함
print("체크하는 의류 BRG Format: ",maxcolor1)
colorsB1 =maxcolor1[2]
colorsG1 = maxcolor1[1]
colorsR1 = maxcolor1[0]
a1=convert_rgb_to_hsv(colorsR1,colorsG1,colorsB1)
up_color=maxcolor1
print("저장되는 의류 HSV Format" ,a1)
#-----------------------------저장하는 의류(하의)--------------------------------------
img_paths = {
'검정슬랙스': 'img/down1.jpg',
'라이트그레이슬랙스': 'img/down2.jpg',
'카키슬랙스': 'img/down3.jpg',
'연청바지': 'img/down4.jpg',
'진청바지': 'img/down5.jpg',
'생지데님바지': 'img/down6.jpg',
'데미지청바지': 'img/down7.jpg',
}
##npy파일 만들기
descs = {
'검정슬랙스': None,
'라이트그레이슬랙스': None,
'카키슬랙스': None,
'연청바지': None,
'진청바지': None,
'생지데님바지': None,
'데미지청바지': None,
}
for name, img_paths in img_paths.items():
#image = mpimg.imread(img_paths) 만약 저장되는 의류가 보고싶을 떄 삽입코드
#plt.imshow(image)
maxcolor=image_color_cluster(img_paths,False)
down_color=maxcolor
colorsB =maxcolor[2]
colorsG = maxcolor[1]
colorsR = maxcolor[0]
a=convert_rgb_to_hsv(colorsR,colorsG,colorsB)
print("저장되는 의류 :",name)
print("저장되는 의류 RGB Format: ", maxcolor)
print("저장되는 의류 HSV Format" ,a)
check_up_down (up_color,a,chkimg,img_paths)
descs[name] = a
#각사람의 이름에 맞게 인코딩결과를 저장
np.save('img/descs.npy', descs)
print(descs)
이 프로그램은 '어떤 한 개의 상의가 있으면' '내가 가지고 있는 다수의 하의 색상'과 '톤온톤' 또는 '톤인톤'이 맞는지
확인하는 방식으로 되어 있습니다!
길게 보이지만 정말 별거 없습니다!
함수 부분을 제외한 실행 부분인데요
먼저 함수는
k-means clustering을 위한 image_color_cluster() 함수와
RGB 값을 HSV로 변환하기 위한 convert_rgb_to_hsv() 함수,
그리고 HSV값을 이용해 톤온톤과 톤인톤을 판단하는 check_up_down() 함수로 구성되어 있습니다.
이 내용들은 후에 알아보기로 하고요!
위의 코드 한번 샅샅이 공부해볼게요!
chkimg = "img/up1.jpg"
image = mpimg.imread(chkimg)
plt.imshow(image)
자 먼저 첫 부분!
정말 간단히 보면!
1. 이미지 저장하고
2. 읽어와서
3. 보여준다!
가 끝입니다.
한번 자세히 봐볼까요?
1.
chkimg에 상대 경로로 된 이미지를 저장하는 건데요!
파이썬 파일이 있는 곳에 해당 폴더가 있어야 합니다!
2.
imread는 전 포스팅에서 배웠죠??
근데 mpimg는 뭐지..? 하실 거예요!
위에 import 부분을 보면
import matplotlib.image as mpimg
이런 부분이 있습니다!
바로 matplotlib로 이미지를 띄우기 위해선데요
3.
이 부분에서 plot.imshow()를 하게 된다면
이런 그래프 형식으로 불러오게 됩니다!
이 형식은 이미지에 마우스를 올리면 우측 하단에 해당 좌표와 RGB 값을 알 수 있습니다!
up_color=image_color_cluster(chkimg,True) #TRUE는 해당 bar를 보여주게끔한다.밑에서는 생략하려고 함
print("체크하는 의류 BRG Format: ",up_color)
colorsB1 =up_color[2]
colorsG1 = up_color[1]
colorsR1 = up_color[0]
up_hsv_color=convert_rgb_to_hsv(colorsR1,colorsG1,colorsB1)
print("저장되는 의류 HSV Format" ,up_hsv_color)
두 번째 코드 단락입니다.
보시게 되면 변수의 용도는 뭔지 왜 있는지 궁금하실 거예요!
설명을 해드리면
up_color : k-menas clustering을 통해 가져온 해당 옷 색상의 주된 색상값
colorsB1, G1, R1 : 상의 RGB 값
up_hsv_color : convert_rgb_to_hsv() 함수로 가져온 hsv값
이렇게 구성시켜봤는데요!
사실 함수 부분을 안 보여드려서 답답해하실 수 있는데
그렇게 중요한 부분은 아니니 해당 변수의 설명으로 이해해주시면 감사하겠습니다!
보시면 RGB 값을 따로 저장하는 부분이 있습니다
저게 어떻게 된 것이냐면
clustering을 통해 가장 주된 색상값을 retruen 하여 (?,?,?) 값을 갖고 와서
후에 다시 convert_rgb_to_hsv를 하기 위해 가져온 값입니다.
간단하게 설명하면
"상의의 가장 주된 색상의 RGB 값을 가져오고 HSV값으로 가져와 보기 쉽게 출력한다."
입니다.
img_paths = {
'검정슬랙스': 'img/down1.jpg',
'라이트그레이슬랙스': 'img/down2.jpg',
'카키슬랙스': 'img/down3.jpg',
'연청바지': 'img/down4.jpg',
'진청바지': 'img/down5.jpg',
'생지데님바지': 'img/down6.jpg',
'데미지청바지': 'img/down7.jpg',
}
##npy파일 만들기
descs = {
'검정슬랙스': None,
'라이트그레이슬랙스': None,
'카키슬랙스': None,
'연청바지': None,
'진청바지': None,
'생지데님바지': None,
'데미지청바지': None,
}
이 부분은 다수의 하의 이미지를 npy 파일을 만들기 위한 단락입니다!
img_paths와 descs는 딕셔너리 자료형으로 구성되어있습니다.
딕셔너리 자료형은 대응 관계를 나타낼 수 있는 자료형으로 설명 가능합니다!
이 파일을 저장하고 불러오는 것을 할 건데요!
for name, img_paths in img_paths.items():
#image = mpimg.imread(img_paths) 만약 저장되는 의류가 보고싶을 떄 삽입코드
#plt.imshow(image)
down_color=image_color_cluster(img_paths,False)
colorsB =down_color[2]
colorsG = down_color[1]
colorsR = down_color[0]
down_hsv_color=convert_rgb_to_hsv(colorsR,colorsG,colorsB)
print("저장되는 의류 :",name)
print("저장되는 의류 RGB Format: ", down_color)
print("저장되는 의류 HSV Format" ,down_hsv_color)
check_up_down (up_hsv_color,down_hsv_color,chkimg,img_paths)
descs[name] = down_hsv_color
#각사람의 이름에 맞게 인코딩결과를 저장
np.save('img/descs.npy', descs)
print(descs)
이 부분은 상의의 색상을 체크하는 부분과 비슷하게 되어 있습니다!
이 반복문은 딕셔너리형으로 된 img_paths을 기준으로 반복되는데요!
for name, img_paths in img_paths.items():
- 여기서 name은 img_paths의 첫 번째 부분, 즉 의류의 이름을 나타냅니다! '이름' : '이미지 경로'로 구성되어있으니까 그 앞에 이름 부분을 뜻하는 것입니다.
- 두 번째 img_paths는 당연히 그 뒤에 부분을 뜻하는 것이겠죠?
- img_paths.items()는 img_paths의 크기만큼만 반복한다는 것입니다.
그다음 부분은 위의 상의 부분이랑 똑같으니까 생략하고~
이 부분을 한번 볼까요?
descs[name] = down_hsv_color
#각사람의 이름에 맞게 인코딩결과를 저장
np.save('img/descs.npy', descs)
print(descs)
- descs [name]= down_hsv_color : 우리가 위에서 만들었던 npy파일을 만들기 위한 descs에 name에 따라 hsv값을 넣는 것입니다.
- np.save('img/descs.npy', descs) : np명령어입니다! numpy를 저장하기 위한 명령어예요.
- print(descs) : 저장한 npy파일을 출력합니다
여기서 궁금한 점은 바로 npy 파일이겠죠?
쉽게 말하자면 어떤 데이터를 이진화해서 파일 형식으로 저장해놓고, 나중에 사용해야 할 때 다시 불러와서 사용할 수 있다는 것입니다.
그러면 나중에 사용할 때는 직접 변수 선언하고 저장하고 불러오는 게 아닌 불러오기만 하면 되겠죠?
이렇게 해서 실행 부분만 보여드렸는데요
아직 이해 안 되는 부분이 있을 거라고 생각됩니다.
함수 부분이 중요한 포인트이기 때문에 따로 포스팅하기로 결정했는데
이 실행 부분은 그래도 쉬운 부분이니까
정말 간단하게 보고 이해하셨으면 좋겠습니다.
그럼 다음 포스팅에서 봐요~~
'파이썬' 카테고리의 다른 글
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을 이용한 상 하의 색상 매칭-2 (0) | 2021.11.08 |
OPENCV와 K-MEANS CLUSTERING을 이용한 상 하의 색상 매칭-1 (0) | 2021.11.06 |