Opencv

정재호·2024년 7월 11일

개요

· OpenCV
o Gray Bradsky에 의해 1996년 인텔에서 시작된 프로젝트
○ 컴퓨터 비전, 머신러닝과 관련된 다양한 알고리즘을 지원
o C++, Python, Java 등의 언어를 지원
o CUDA(Compute Unified Device Architecture), OpenCL(Open Computing Language)에 기반한 인터페이스를 지원

. OpenCV + Python
○ OpenCV의 파이썬 API로 C/C++로 된 OpenCV 라이브러리들을 파이썬 래퍼로 감싼 후에 파이썬 모듈을 추가시킨 것
○ 속도문제를 해결하기 위해 속도가 문제되는 코드는 C/C++로 코딩하고 파이썬에서 불러 사용할 수 있는 파이썬 래퍼를 제공
o OpenCV 배열은 Numpy 배열로 변환되어 내부 처리를 수행 (Numpy의 모든 연산 가능)
o Numpy, SciPy, Matplotlib 라이브러리와도 호환

추천 사이트
nttps//aocs.opencv.org/4.x/ay/aro/tutonar_root.ntml: 뉴노디일
o https://docs.opencv.org/ : 온라인 문서 (명령어)
https://leechamin.tistory.com/category/Python/OpenCV?page=10 : 블로그
· https://www.codeproject.com/Tags/OpenCV ; 다양한 OpenCV 코드 제공
https://leamopencv.com,: 프로젝트에 활용하기 좋은 다양한 코드 제공
·https://github.com/spmallick/leamopencv/tree/master/: 파이토치로 된 좋은 예시 코드
· https://github.com/spmallick/learnopencv/blob/master/README.md?ck_subscriber_id=1390420859
· https://meissa.tistory.com/: OpenCV 고급 응용 예시 코드 (딥러닝 학습 포함)
· http://www.computer-vision-software.com/blog/: 컴퓨터 비젼 관련 해외 블로그
https://github.com/LongxingTan/Yolov5: Yolovs 코드
· https://blog.naver.com/samsjang/220498694383 : 블로그
https://m.blog.naver.com/samsjang/220498694383 : 블로그
· https://cafe.naver.com/openov; OpenCV 커뮤니티 카페
· https://m.blog.naver.com/teach3450/221906560229 : 블로그 (다양한 말고리즘 소개)

  • Code






opencv 설치 확인

import cv2

버전 확인

print(cv2.version)
안되면

!pip3 install opencv-python



실습문제

○ 학습한 OpenCV 함수를 이용해서 다른 이미지를 출력해보자.

matplotlib를 이용하여 이미지 출력하기

• plt.xticks() : x축에 간격을 구분하기 위한 눈금을 표현
• plt.yticks() : y축에 간격을 구분하기 위한 눈금을 표현
• plt.imshow0 : 현재 Figure에서 이미지 출력(없을 경우 새 figure 생성)
• plt.show( : figure를 디스플레이 해줌(imshow0)의 뒤에 오는 것은 가능, 반대는 불가능)
• %matplotlib inline : 주피터 노트북에서 피겨가 셀 바로 밑에 출력되도록 하는 백엔드 커맨드

예제1

import matplotlib.pyplot as plt
import numpy as np

x= np.arange(0, 2, 0.2)

plt.plot(x, x, "bo")
plt.plot(x, x 2, color='#e35f62', marker='*', linewidth=2)
plt.plot(x, x
3, color='forestgreen', marker='^', markersize=9)
plt.xticks([0, 1, 2])
plt.yticks(np.arange(1, 6))

plt. show()

실습

import matplotlib.pyplot as plt
%matplotlib inline

plt.imshow(image)




• 칼라 → gray 이미지 변환 방법 2가지
○ imread()로 이미지를 읽을 때 변환해서 읽는 방법
■ img = cv2.imread(파일명, cv2.IMREAD_GRAYSCALE)
○ 칼라 이미지로 읽어서 cvtColor() 변환하는 방법 → 칼라 이미지가 필요한 경우 (출력)
■ img_gray = cv2.cvtColor(이미지객체, cv2.COLOR_BGR2GRAY)

예제 1

import numpy as np
from matplotlib import pyplot as plt

Z= np.array([[10,0,0], [0,10,0], [0,0,10]])
print(Z)

plt.imshow(Z)
plt.show()

예제 2

import numpy as np
import matplotlib.cm as cm
from matplotlib import pyplot as plt

Z = np.array([[20,5,2], [2,20, 3], [11, 2,20]])
plt.imshow(Z, cmap = cm.gray)
plt.show()




실습 문제

# 실습 문제

import cv2

video = cv2.VideoCapture("videos/puppy.mp4")

while video.isOpened():
    ret, frame = video.read()
    if not ret:
        print('Frame이 끝났습니다')
        break

    cv2.imshow("puppy", frame)

    if cv2.waitKey(25) == ord('q'):
        print("동영상 종료")
        break

video.release()
cv2.destroyAllWindows ()

import cv2

video = cv2.VideoCapture("videos/puppy.mp4")

while video.isOpened():
    ret, frame = video.read()
    if not ret:
        print('Frame이 끝났습니다')
        break

    cv2. imshow("puppy", frame)

    if cv2.waitKey(25) == ord('q'):
        print("동영상 종료")
        cv2. imwrite("images/frame2.png", frame)
        print("해당 프레임이 종료되었습니다")
        break

video.release()
cv2.destroyAllWindows ()


Youtube의 메타 데이터를 수집/검색하거나 다운로드 할 수 있는 Python 라이브러리

!pip install pafy

유튜브로부터 영상만을 다운로드

!pip install youtube-dl

유튜브로부터 영상만을 다운로드 (youtube-dl 라이브러리 업그레이드 버전)

!pip install yt-dlp

lpip install -- upgrade -- force-reinstall "git+https://github.com/ytdl-org/youtube-dl.git"

  • 경로

C:\Users\USER\AppData\Local\GitHubDesktop\app-3.4.1\resources\app\git\cmd

고급시스템 설정

새 파일 열기
C:\Users\USER\anaconda3\envs\opencv\Lib\site-packages\pafy




주소를 나눔
비디오로 저장해주겠다.
os.path.join 저장할떄 주소를 만들어줌
.join 인수1,2 합쳐서 만듬
변수명을 바꿔가면서 저장할때 사용

유튜브 다운로드

# 실습 

import youtube_dl

import os
output_dir = os.path.join('videos/', '%(title)s.%(ext)s')

download_list = ["https://www.youtube.com/watch?v=Q3K0TOvTOno"]

ydl_opt = {
    'outtml1' : output_dir,
    'format' : 'bestvideo/best'
}

with youtube_dl.YoutubeDL(ydl_opt) as ydl:
    ydl.download(download_list)

print('Download 완료')


# 실습

from pytube import .YouTube
import.os

def downloadYouTube(url, path):

  yt =YouTube(ur1)
  yt=yt. streams. filter(progressive=True, file_extension='mp4').\
  order_by('resolution').desc().first()

  if not os.path.exists(path):
  os.makedirs(path)

video_path =. "https://www.youtube.com/watch?v=Qik3RP-1CV8"
downloadYouTube(video_path, .'videos')


1번이 안되서 안되서 폴더구조를 직접 폴더 만들고 이름써서 만들어줌

profile
성장하는 하루가 되자

0개의 댓글