티스토리 뷰
반응형
*** 위키백과 발췌 (https://ko.wikipedia.org/wiki/OpenCV)
OpenCV(Open Source Computer Vision)은 실시간 컴퓨터 비전을 목적으로 한 프로그래밍 라이브러리이다.
원래는 인텔이 개발하였다.
실시간 이미지 프로세싱에 중점을 둔 라이브러리이다.
인텔 CPU에서 사용되는 경우 속도의 향상을 볼 수 있는 IPP(Intel Performance Primitives)를 지원한다.
이 라이브러리는 윈도우, 리눅스 등에서 사용 가능한 크로스 플랫폼이며 오픈소스 BSD 허가서 하에서 무료로 사용할 수 있다.
OpenCV는 TensorFlow, Torch / PyTorch 및 Caffe의 딥러닝 프레임워크를 지원한다.
1. OpenCV 설치
- pypi.org 를 통한 설치 가이드 : https://pypi.org/project/opencv-python/
opencv-python
Wrapper package for OpenCV python bindings.
pypi.org
- 터미널을 통한 설치
python -m pip install opencv-python
python -m pip install opencv-python 명령어는 Python의 pip 패키지 관리자를 사용하여 OpenCV-Python 패키지를 설치하는 것입니다.
이 명령어는 Python 환경에 OpenCV 라이브러리를 설치하여 컴퓨터 비전, 이미지 처리, 머신러닝 모델 개발 등의 작업을 수행할 수 있도록 합니다.
- OpenCV 설치 확인
import cv2
print(cv2.__version__)
2. 카메라 출력
import cv2
# 노트북, 내장 카메라 (0)
# 외장 카메라 (1 ~ n)
capture = cv2.VideoCapture(0)
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while cv2.waitKey(33) < 0:
ret, frame = capture.read()
cv2.imshow("VideoFrame", frame)
# 메모리 해제
capture.release()
# 모든 윈도우 제거 함수
# 특정 윈도우 창 닫기 : cv2.destroyAllWindows(winname)
cv2.destroyAllWindows()
- 노트북, 내장 카메라 (0), 외장 카메라 (1 ~ n)
capture = cv2.VideoCapture(0)
이 프로그램은 OpenCV 라이브러리를 사용하여 컴퓨터의 웹캠으로부터 비디오 스트림을 캡처하는 것을 목적으로 합니다.
cv2.VideoCapture(0) 함수는 웹캠의 장치 번호 0을 인자로 받아 VideoCapture 객체를 생성합니다.
capture 변수에 VideoCapture 객체가 저장되며, 이 객체를 통해 웹캠으로부터 비디오 스트림을 캡처할 수 있습니다.
3. 이미지 출력
import cv2
image = cv2.imread("Image/lunar.jpg", cv2.IMREAD_ANYCOLOR)
cv2.imshow("Moon", image)
cv2.waitKey()
cv2.destroyAllWindows()
이 파이썬 프로그램에서 image = cv2.imread("Image/lunar.jpg", cv2.IMREAD_ANYCOLOR) 라인은 OpenCV 라이브러리를 사용하여 "Image/lunar.jpg" 경로에서 이미지 파일을 읽어와서 그 이미지를 image 변수에 저장하는 것입니다.
cv2.IMREAD_ANYCOLOR 인수는 이미지 파일을 읽어올 때 색상 정보를 어떻게 처리할지를 지정하는 인수입니다.
이 코드를 실행하면 "Image/lunar.jpg" 경로에 있는 이미지 파일을 OpenCV 형식으로 읽어와서 image 변수에 저장할 수 있습니다.
- 기타 속성
cv2.IMREAD_UNCHANGED # 원본 사용
cv2.IMREAD_GRAYSCALE # 1 채널, 그레이스케일 적용
cv2.IMREAD_COLOR # 3 채널, RGB 이미지 사용
cv2.IMREAD_ANYDEPTH # 이미지에 따라 정밀도를 16/32비트 또는 8비트로 사용
cv2.IMREAD_ANYCOLOR # 가능한 3 채널, 생상 이미지로 사용
cv2.IMREAD_REDUCED_GRAYSCALE_2 # 1 채널, 1/2 크기, 그레이스케일 적용
cv2.IMREAD_REDUCED_GRAYSCALE_4 # 1 채널, 1/4 크기, 그레이스케일 적용
cv2.IMREAD_REDUCED_GRAYSCALE_8 # 1 채널, 1/8 크기, 그레이스케일 적용
cv2.IMREAD_REDUCED__COLOR_2 # 3 채널, 1/2 크기, RGB 이미지 사용
cv2.IMREAD_REDUCED__COLOR_4 # 3 채널, 1/4 크기, RGB 이미지 사용
cv2.IMREAD_REDUCED__COLOR_8 # 3 채널, 1/8 크기, RGB 이미지 사용
4. 비디오 출력
import cv2
capture = cv2.VideoCapture("Image/Star.mp4")
while cv2.waitKey(33) < 0:
if capture.get(cv2.CAP_PROP_POS_FRAMES) == capture.get(cv2.CAP_PROP_FRAME_COUNT):
capture.set(cv2.CAP_PROP_POS_FRAMES, 0)
ret, frame = capture.read()
cv2.imshow("VideoFrame", frame)
capture.release()
cv2.destroyAllWindows()
이 코드는 비디오 스트림을 캡처하여 화면에 표시하는 무한 루프입니다.
while cv2.waitKey(33) < 0: 루프는 cv2.waitKey(33) 함수가 0보다 큰 값을 반환할 때까지 무한적으로 수행됩니다.
if capture.get(cv2.CAP_PROP_POS_FRAMES) == capture.get(cv2.CAP_PROP_FRAME_COUNT): 부분은 캡처된 프레임 수가 전체 프레임 수와 같은 경우에, 프레임 위치를 0으로 설정하여 다시 캡처를 시작하는 것을 의미합니다.
ret, frame = capture.read() 부분은 capture 객체를 통해 다음 프레임을 읽어오며, ret 변수에는 프레임의 유효성을 나타내는 Boolean 값이 저장되고 frame 변수에는 프레임 이미지가 저장됩니다.
cv2.imshow("VideoFrame", frame) 부분은 frame 변수에 저장된 프레임 이미지를 "VideoFrame" 이름으로 표시하는 것입니다.
5. 대칭
import cv2
src = cv2.imread('image/glass.webp', cv2.IMREAD_COLOR)
dst = cv2.flip(src, 0)
dst2 = cv2.flip(src, 1)
cv2.imshow("src", src) # 원본 이미지
cv2.imshow("dst", dst) # 대칭 이미지
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()
이 파이썬 프로그램에서 src = cv2.imread('image/glass.webp', cv2.IMREAD_COLOR) 라인은 OpenCV 라이브러리를 사용하여 "image/glass.webp" 경로에서 이미지 파일을 읽어와서 그 이미지를 src 변수에 저장하는 것입니다.
cv2.IMREAD_COLOR 인수는 이미지 파일을 읽어올 때 색상 정보를 어떻게 처리할지를 지정하는 인수입니다.
그 다음, dst = cv2.flip(src, 0) 라인에서는 OpenCV의 flip 함수를 사용하여 src 변수에 저장된 이미지를 수직으로 뒤집어서 dst 변수에 저장하는 것입니다. 0 인수는 수직 방향으로 뒤집을 것을 지정하는 것입니다.
마지막으로, dst2 = cv2.flip(src, 1) 라인에서는 OpenCV의 flip 함수를 사용하여 src 변수에 저장된 이미지를 수평으로 뒤집어서 dst2 변수에 저장하는 것입니다. 1 인수는 수평 방향으로 뒤집을 것을 지정하는 것입다.
- flipCode < 0 : xy 축 대칭 (상하좌우 대칭)
- flipCode = 0 : x 축 대칭 (상하 대칭)
- flipCode > 0 : y 축 대칭 (좌우 대칭)
6. 회전
import cv2
src = cv2.imread("Image/ara.jpg", cv2.IMREAD_COLOR)
height, width, channel = src.shape
matrix = cv2.getRotationMatrix2D((width/2, height/2), 90, 1)
dst = cv2.warpAffine(src, matrix, (width, height))
cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()
이 코드는 이미지를 회전하는 프로그램입니다.
src = cv2.imread("Image/ara.jpg", cv2.IMREAD_COLOR) 부분은 "Image/ara.jpg" 경로에 있는 이미지를 src 변수에 읽어오는 것입니다.
height, width, channel = src.shape 부분은 src 변수에 저장된 이미지의 높이, 너비, 채널 수를 height, width, channel 변수에 각각 저장하는 것입니다.
matrix = cv2.getRotationMatrix2D((width/2, height/2), 90, 1) 부분은 이미지의 중심점(width/2, height/2)을 기준으로 90도 회전하는 매트릭스를 구하는 것입니다.
dst = cv2.warpAffine(src, matrix, (width, height)) 부분은 src 변수에 저장된 이미지를 matrix 변수에 기술된 매트릭스로 변형하여 dst 변수에 저장하는 것입니다.
matrix = cv2.getRotationMatrix2D(center, angle, scale)
- 중심점(center), 각도(angle), 비율(scale)
7. 확대 & 축소
import cv2
src = cv2.imread("Image/fruits.jpg", cv2.IMREAD_COLOR)
height, width, channel = src.shape
dst = cv2.pyrUp(src, dstsize=(width * 2, height * 2), borderType=cv2.BORDER_DEFAULT)
dst2 = cv2.pyrDown(src)
cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()
위의 파이썬 코드는 OpenCV 라이브러리를 사용하여 이미지의 사이즈를 변경하는 것입니다.
"Image/fruits.jpg" 이미지를 읽어서 src 변수에 할당합니다. cv2.IMREAD_COLOR 옵션을 사용하여 컬러 이미지로 로드합니다.
src 이미지의 높이, 너비, 채널 수 정보를 height, width, channel 변수에 각각 할당합니다.
cv2.pyrUp() 함수를 사용하여 src 이미지의 사이즈를 두 배로 확대한 이미지를 dst 변수에 할당합니다.
cv2.pyrDown() 함수를 사용하여 src 이미지의 사이즈를 절반으로 축소한 이미지를 dst2 변수에 할당합니다.
- 이미지 확대 함수 : cv2.pyrUp
# src : 입력 이미지
# dstSize : 출력 이미지 크기
# borderType : 테두리 외삽법
dst = cv2.pyrUp(src, dstSize, borderType)
- 이미지 축소 함수 : cv2.pyrDown
8. 크기 조절
import cv2
src = cv2.imread("Image/champagne.jpg", cv2.IMREAD_COLOR)
dst = cv2.resize(src, dsize=(640, 480), interpolation=cv2.INTER_AREA)
dst2 = cv2.resize(src, dsize=(0, 0), fx=0.3, fy=0.7, interpolation=cv2.INTER_LINEAR)
cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()
이 코드는 이미지의 크기를 조절하는 프로그램입니다.
src = cv2.imread("Image/champagne.jpg", cv2.IMREAD_COLOR) 부분은 "Image/champagne.jpg" 경로에 있는 이미지를 src 변수에 읽어오는 것입니다.
dst = cv2.resize(src, dsize=(640, 480), interpolation=cv2.INTER_AREA) 부분은 src 변수에 저장된 이미지의 크기를 (640, 480)로 고정하여 dst 변수에 저장하는 것입니다.
interpolation 부분은 이미지 크기 조절 시 보간법을 지정하는 것입니다.
cv2.INTER_AREA는 공간 크기 줄이기에 적합한 보간법입니다.
dst2 = cv2.resize(src, dsize=(0, 0), fx=0.3, fy=0.7, interpolation=cv2.INTER_LINEAR) 부분은 src 변수에 저장된 이미지의 크기를 fx=0.3, fy=0.7의 비율로 조절하여 dst2 변수에 저장하는 것입니다.
interpolation 부분은 이미지 크기 조절 시 보간법을 지정하는 것입니다.
cv2.INTER_LINEAR는 이미지 확대시 적합한 보간법입니다.
- 이미지 크기 조절 함수 (cv2.resize)
# src : 입력 이미지
# dstSize : 절대 크기
# fx, fy : 상대 크기
# interpolation : 보간법
dst = cv2.resize(src, dstSize, fx, fy, interpolation)
보간법 이란?
보간법(Interpolation)은 두 개 이상의 주어진 값 사이에 새로운 값을 추정하는 것을 말합니다.
예를 들어, 두 개의 값 (x1, y1)와 (x2, y2)가 주어져 있고, 이 사이에 새로운 x 값이 주어지면 y 값을 예측하는 것입니다.
이를 위해 선형 보간, 다항식 보간, 스플라인 보간 등의 방법을 사용할 수 있습니다.
반응형
'Dev > Python' 카테고리의 다른 글
conda env 가상환경 생성, 삭제, 리스트, 활성화, 비활성화 (0) | 2023.04.13 |
---|---|
BeautifulSoup 을 활용한 네이버 실시간 주식 시세 확인 (0) | 2023.04.12 |
[TensorFlow] Mac M1 에서 TensorFlow 설치 (0) | 2023.02.09 |
아나콘다(Anaconda) - 파이썬 가상 환경 설정 (0) | 2023.02.08 |
파이썬(Python) 가상환경 설정 (0) | 2023.02.08 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- youChat
- 파이썬
- 기업가 정신
- 창업교육전문가
- M1
- translaite
- 네이버실시간주식
- 맥
- 플러터 오류
- 창업
- parsing error
- 자질
- conda
- 맥 실리콘
- homebrew
- Python
- No Babel
- flutter doctor
- ChatGPT
- 기본
- Flutter
- 날짜 시간 추출
- Format code on save
- 가상환경
- 창업지도사
- 기업가
- 플러터
- 사업기회포착
- Auto Formatting
- 설치
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
글 보관함