사전
사전은 순서 상관X
키를 통해 값을 불러옴
키는 중복 불가
값은 중복 가능
=> 맵핑 시키고 싶을 때
생성
추가
key 중복 : 나중에 들어간 키와 밸류가 남는다
key 리스트
dict_keys라는 객체로 반환됨
리스트 형태로 쓰고 싶다면 list(a.keys())로 쓸 것(list()로 쓰면 리스트가 생성됨)
print(a_keys[0]) => 에러
shift+tap으로 설명보기(에러 나도 한번 돌려봐야 나옴)
print(a_keys[0]) => 가능(리스트라)
key 리스트
value 리스트도 가능
key, value 쌍 얻기
print(a.get('name')) # a['name']과 같은 동작
존재하지 않는 key 접근
print(a.get('nope')) => None 반환
print(a.['nope']) => Error 발생
default 값
print(a.get('name','default_value'))
키가 없는 경우 default값 반환
key 존재 여부 조사
집합
생성
집합 자료형 인덱스 접근을 위해선 리스트나 튜플로 변환 후 사용
교집합
합집합
차집합
추가/제거
Numpy
영상 처리에서는 이미지 데이터를 행렬(배열)로 표현함
행렬이나 다차원 배열을 쉽게 처리 할수 있도록 지원하는 라이브러리
import numpy as np
array=np.array([[1,2,3], # np = Numpy
[4,5,6]])
print(array.ndim) # 차원이 몇개냐 : 2
print(array.shape) # 3칸 짜리가 2줄 있다 : 2(줄), 3(칸)
print(array.dtype) # 데이터가 어떤 자료형이냐 : int32
보통 3차원을 많이 쓴다
arange
배열을 자동으로 만들어줌
Numpy.arange([start,]stop, [step,]dtype=None, *, Like=None)
# []은 옵션, 디폴트는 None / start는 시작하는 부분(디폴트는 0), step은 단위(디폴트는 1)
자주 쓰이는 함수
np.ones(1로 채운다) / np.zeros(0으로 채운다) / np.full(특정 값으로 채운다)
3차원 배열
슬라이싱 => start : stop : step
배열 차원 변형(reshape)
order='F' => 메모리구조 : C구조(순서대로 안부터 채운다), Fortran구조(바깥부터 채운다)
배열 차원 확장(newaxis)
배열 차원 축소(flatten, ravel)
* ravel : 풀다(다차원을 1차원으로 푸는 것)
배열 병합(stack)
배열병합(hstack)
가로로 합친다
배열병합(vstack)
세로로 합친다
아직 안배웠지만 유추해보기
import cv2 # cv2를 이용한다
import numpy as np
image = cv2.imread("mountain.jpg") # image를 읽어온다
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # BGR을 GRAYScale로 바꾼다
result = np.zeros((image.shape[0], 256), dtype=np.uint8) # zeros를 이용한다
hist = cv2.calcHist([image], [0], None, [256], [0, 256]) # 히스토그램으로 표현?
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX) # 뭔가 노멀라이즈한다
for x, y in enumerate(hist):
cv2.line(result, (int(x), image.shape[0]), (int(x), image.shape[0] - int(y)), 255) # 라인으로 변환?
dst = np.hstack([image[:, :, 0], result]) # hstack 이용
cv2.imshow("dst",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
해보자
x : 구간 / y : 도수, 측정 개수
hist를 x, y에 담는다
(int(x), image.shape[0])
각각 x, y에 해당
선은 255(흰색)로 긋는다(위에서 0(검정)으로 배경을 설정했기 때문)
영상 좌표는 y의 방향이 거꾸로 되어있다. 맨 위가 원점
실행 결과
이미지 분리
배열 브로드캐스팅
ndarray 클래스 - ROI 예제
ndarray 클래스 - COI 예제
채널을 자른다
변수에 이미지 grayscale로 담기
이미지 출력
* 대문자는 플래그 값이구나, 코드 값이구나 이해하면 됨
동영상 출력
FPS : 초당 프레임 수
캠 화면 띄우기
결과
도형 그리기
선형 타입
어떤 방식으로 선을 그릴지 결정하는 인수
=> 선에 닿는 픽셀을 조건에 맞게 칠한다
브레젠험 4연결 방식 : 선분 기준 상,하,좌,우
브레젠험 8연결 방식 : 선분 기준 상,하,좌,우,대각선
안티 에일리어싱 방식 : 가우스 필터링
비트 시프트
도형 그리기 함수에서 일반적으로 정수값 사용
비트 시프트로 실수값 좌표를 도형 그리기 함수에 사용 할 수 있게 해줌
비트 시프트 값만큼 오른쪽 시프트 연산
16비트
0 | 0 | 1 | 0 | 0 | 0 | 0 |
16 >> 1
0 | 0 | 0 | 1 | 0 | 0 | 0 |
=> 오른쪽으로 한칸 이동해 8이 됨(순서 : 0,2,4,8,16...)
ex 선분(2, 2), (8, 5)를 1시프트 하면 (1, 1), (4, 2.5)로 표현되고 반올림하여 (1, 1), (4, 3)이 됨
도형 그리기
결과
트랙 바
이미지 저장
동영상 저장
HSV 색상 공간
채널 분리
mv = cv2.split(src) => mv 배열에 src 분리하여 채널별 정보 저장
c0, c1, c2 = cv2.split(src) : c0, c1, c2 각 변수에 단일 채널 정보 저장
mv[0] == c0
mv[1] == c1
mv[2] == c2
위와 같이 하면 특정 색이 어딘지 분간하기 어려울 수 있다. 따라서 hsv로 변환한다.
HSV로 변환해서 RED인 곳을 찾자
더 정확하게 찾기(배열병합함수add.Weighted 이용)
이진화
그레이 스케일로 변환
이진화 알고리즘 종류
cv2.THRESH_BINARY
cv2.THRESH_BINARY_INV(반전)
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV
=> 뭘 써야 할 지 모르겠다 => otsu 쓰면 됨
cv2.adaptiveThreshold
느낀 점
채널, HSV 등 아는 개념이 많이 나와 개념은 비교적 이해가 잘 되는 것 같다.
익숙해지는 게 문젠데...
영상 처리가 아직 지금까지 배운 것 중엔 제일 흥미롭다.
요즘 코로나로 인해 일상생활에서도(ex 비대면 체온계)많이 볼 수 있는 기술이 아닌가 싶다.
사실 중국 cctv 안면인식이 제일 흥미롭다.
숙제 : 트랙바 추가하여 hue 값 조정
혼자 숙제를 해보려고 이것저것 찾아봤는데 hue 값만 단독으로 조절하는 건 못찾았다.
그래서 나름 모은 정보들 가지고 응용을 해봤다.
참고 링크
색깔 검출하기_woo0_hooo | 색상 영역 검출_rkftks22 | 트랙바를 이용한 그레이스케일레벨_AI꿈나무 | Python OpevCV강좌_트랙바
내가 작성해본 코드
# 맨 처음 작성본
결과
고찰
오류 메세지엔 이미 설정한 윈도우(HuePalette)가 getTrackPos에서 null이라는데 순서가 이상하게 꼬인 것 같다...
# 나름 수정 시도
고찰
나름 while에서 빼서 함수를 정의하는 방식으로 해봤는데 함수가 정의되지 않았다고 뜬다. 그래서 위에 있어서 그런건 아닌가 의심했다.
# 수정 시도 2
고찰
위치를 위로 옮겼더니 이번엔 imshow에서 에러가 뜬다. 여기서 이젠 좀 다른 방법으로 시도하는 건 어떨까 싶어 다르게 짜보았다.
# 새로운 시도
결과
고찰
지금까진 그냥 src에서 image를 read 할 때 HSV 변환도 시도했는데, 변환한 image를 따로 뺀 글이 있길래 따라해봤다.
while에 넣는 것보다 함수에 정의하는게 순서가 더 보기 좋아 보여서 함수에 넣는 방식을 사용했다.
lowerb라길래 0, upperb라길래 s,v의 최대값인 255를 넣었다. hue는 그냥 hue로 값을 받아 넣으면 될 것 같아서 그대로 넣었다.
trackbar(0)은 참고한 링크에 있길래 넣었는데 사실 정확히 무슨 역할인지 모르겠다. 함수 호출인 것 같은데 빼면 이미지가 안뜬다.
근데 강사님이 참고하라고 보여주신 결과물은 색이 있었던 것 같은데...ㅎ
구글링 하면서 수업시간에 배운 방식으론 하나만 설정 못하는지 궁금해졌다. 내일 시도해봐야겠다.
'공부 > Boot camp' 카테고리의 다른 글
TIL_210103_Vision 인식 (0) | 2022.01.03 |
---|---|
TIL_211231_Vision 인식 (0) | 2021.12.31 |
TIL_211229_VISION 인식 (0) | 2021.12.29 |
TIL_211227_Frontend (0) | 2021.12.27 |
TIL_211224_Frontend (0) | 2021.12.25 |