
오늘은 웹 캠을 연결해 파이썬으로 출력하고 경계선 검출까지만 해보았다.
확실히 계속 무엇이 생성자고 무엇이 멤버변수고 무엇이 객체인지를 항상 생각하면서 진행하니 더욱 재미가 있는 것 같다.
그리고 나중에 여러 오류들을 해결할때 이런 습관이 도움이 되지않을까 싶다.
그러던 와중
edge = cv2.Canny(frame, 50, 50)
이걸보고 당연히 아 Canny는 생성자구나 했지만
강사님이 함수라고 말씀하셔서 쉬는시간에 물어보려했으나
#print(type(edge)) <class 'numpy.ndarray'>
먼저 프린트로 찍어보니 클래스가 Canny가 아니라 numpy였다.
그래서 뭔가하고 gpt에게 질문했고
놀랍게도 함수였다.
클래스는 대문자로 시작하는게 rule이라더니 이렇게 어기는게 있어서 되겠나 라는 생각이 들었고
'C++ 라이브러리에서 가져온 컨벤션을 따라서 함수 이름이 대문자로 시작하는 경우가 있습니다.'
이부분에 대해서는 다음에 질문하는 개발자 탭에서 한번 알아보려한다.
# 수업코드
# hellocv.py
# opencv 패키지 설치 : opencv-python
# opencv 모듈명 : cv2 # computer vision
import cv2
import sys
# print(cv2.__version__)
# 시스템 기본 카메라부터 cv2.VideoCapture 객체 생성함
cap = cv2.VideoCapture(0) # 카메라 열기함. ==> 0 ? 0번째 카메라 시스템에서
if not cap.isOpened(): # 카메라 열기가 실패했다면
print('Camera open failed!') # 카메라가 없거나, 카메라 드라이버 미설정
sys.exit() # 프로그램 종료
# 카메라 프레임 해상도 출력
print('가로 Frame size:', round(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print('세로 Frame size:', round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
# 매 프레임 처리 및 화면 출력
while True:
ret, frame = cap.read() # 다른 어플리케이션에서 이미 카메라를 사용중일 경우 작동 X, ex) zoom에서 카메라를 켜놨다거나 ,,,,
# frame : 카메라로 부터 읽은 프레임 정보 저장
# ret : 읽기 성공 여부저장 ( True | False )
if ret == False: # if not ret: 와 같음 // 읽기 실패했으면
break # 반복 종료함
# edge = cv2.Canny(frame, 50, 150) # 경계선 검출 함수 : 이미지의 경계선만 리턴함
# cv2.Canny(프레임, threshold1, threshold2)
# threshold1 : minVal 임계값 ( 값이 크면 엣지 검출이 어렵고, 작을수록 엣지 검출이 쉽다 )
# 적으면 경계선이 이어짐. 크면 경계선이 끊어짐
# threshold2 : maxVal 임계값 (경계선인지 아닌지를 판단하는 임계값임, 작을수록 엣지가 많아짐)
# edge = cv2.Canny(frame, 150, 150)
edge = cv2.Canny(frame, 50, 50)
cv2.imshow('edge', edge)
cv2.imshow('frame', frame)
#print(type(edge)) <class 'numpy.ndarray'>
# print('ret : ',ret)
#print(frame)
if cv2.waitKey(1) == 27: # esc 키 누르면 # 이 조건을 넣어야 나옴
break
# while end ----------------------------------------------------------------
# 카메라 사용 해제
cap.release()
cv2.destroyAllWindows()
'국비지원교육 > Python' 카테고리의 다른 글
numpy 정리 (0) | 2024.05.23 |
---|---|
opencv - 외곽선 추출 (0) | 2024.05.14 |
opencv - 2 그리고 사진에서 텍스트 추출 (0) | 2024.05.10 |
Python - WordCloud (0) | 2024.05.09 |
Python - 동적크롤링 (0) | 2024.05.08 |