동아리 과제로 주전공을 정하기로 했다✍(◔◡◔)
그래서 나는 여러 프로젝트에서 openCV 라이브러리에 대해
공부했던 경험이 있어서 주전공으로 openCV에 대해서 심화적으로 공부하기로 했다.
우선 내가 openCV를 처음 접했을때 나에게 끌렸던 이유는
실시간으로 이미지를 프로세싱 해주는 과정이 정말 재미있게 다가온거 같다.
그래서 여러가지 프로젝트에 적용도 해봤고 융합도 해봤는데
이건 내가 공부해야되는 분야라는 느낌이 확 왔다👻
openCV 서적을 사서 구매해서 공부를 진행하기로 했다.
나의 목표는 한 주마다 한 챕터를 끝내는걸로 목표를 한다.
이번 주는 첫번째 챕터인 파이썬을 이용해서 기본적인 이미지와 영상 다루기에 대해서
공부하고 정리를 하려고 한다 👀
우선 pip을 이용해서 openCV를 까는법은
pip install opencv-python
을 이용하면 된다.
추가적으로 Main Module뿐만 아니라 Extra Module까지 사용하고 싶다면
pip install opencv-contrib-python
를 이용하면 된다.
>>> import cv2
>>> cv2.__version__
'4.4.0'
위처럼 나온다면 성공이다.
이제 본격적으로 openCV에 대해서 공부를 해보자🤯
import cv2
IMG = cv2.imread('Image_Sample.jpg') # IMG Read
if IMG is None: #Can't load
print("이미지 파일을 읽을 수 없습니다.")
exit(1)
cv2.imshow('IMG', IMG) #Show The Image
cv2.waitKey(0) #If Press 'Q'
cv2.destroyAllWindows() #Quit All Windows
openCV의 정말 기초 코드이다.
하나하나 설명을 해보자면
cv2.imread는 Image를 불러오는 Method이다.
파라메터에는 Image의 src를 넣어주면 된다.
if IMG is None: #Can't load
print("이미지 파일을 읽을 수 없습니다.")
exit(1)
이 부분은 주석과 Code Flow를 본다면 충분히 이해할 수 있는 부분이기에
그냥 설명은 생략하도록 하겠다.
그 다음 cv2.show라는 Function이 나온다.
cv2.show는 실제로 Extra Window를 띄워줘서 사진을 보여주는 Function이다.
First Parameter에는 Extra Window에 Title을 지정하고
Second Parameter에는 띄울 사진의 Object가 담긴 변수를 넣어주면 된다.
cv2.waitkey는 사용자의 키 입력을 기다리는 Function이다.
cv2.destroyAllWindows는 Extra Window를 없어주는 Function이다.
import cv2
Img_Color = cv2.imread("Image_Sample.jpg", cv2.IMREAD_COLOR)
if Img_Color is None:
print("Failed To Load Image")
exit(1)
cv2.namedWindow("Color")
cv2.imshow('Color', Img_Color)
cv2.waitKey(0)
Img_Gray = cv2.cvtColor(Img_Color, cv2.COLOR_BGR2GRAY) #Change The Color To Gray
#First Parameter = RGB Color Picture Src
#Second Parameter = What You Want For Change Color Option
cv2.imshow("GrayImage", Img_Gray)
cv2.imwrite("Gray_Image_Sample.jpg", Img_Gray) #Save The Image Function
#First Parameter = The Name for Save Image File
#Second Parameter = File Src
cv2.waitKey(0)
cv2.destroyAllWindows()
이 코드는 Image를 회색으로 변환하고 Directory에 사진을 저장하는 코드이다.
위와 코드는 비슷하지만 cv2.imread Parameter에 추가된 부분이 있다.
2번째 Parameter에 cv2.IMREAD_COLOR이라는 FLAG가 들어갑니다.
cv2.IMREAD_COLOR는 파일을 Color로 Load하겠다는 것입니다.
원래 Default로 들어가지만 공부하는 차원에서 한번 써봤습니다😦
cv2.namedWindow는 Extra Window를 먼저 띄운 후 Image를 나중에
Load 할 때 사용하는 Function입니다.
cv2.namedWindow를 활용하여 Image 크기도 조절 할 수 있습니다.
cv2.cvtColor는 Image의 Color를 바꾸는 위 코드의 핵심 Function입니다.
First Parameter에는 바꾸자 하는 Image의 Object가 담겨 있는 변수를 넣으면 됩니다.
Second Parameter에는 바꾸자 하는 색깔의 Function을 넣으면 됩니다.
저는 회색으로 바꾸자 하여 cv2.COLOR_BGR2GRAY을 넣었습니다.
cv2.imwrite는 C언어의 파일 입출력와 같이 Image를 저장할 수 있는 Function입니다.
First Parameter에는 저장할 Image의 Title을 지정해주면 됩니다.
Second Parameter에는 저장하고자 하는 Image의 object가 담긴 변수를 넣어주면 됩니다.
import cv2 as cv
cap = cv.VideoCapture(0)
# If You Want Capture The Video -> Make ViceoCapture()
#VideoCapture(Index)
# If Camera is Built In Your Computer Index is 0
# If Comera is External And Index is 1
if cap.isOpened() == False: #Can't Open The Camera
print("Failed To Open Camera.")
exit(1)
while(True):
Ret , Image_Frame = cap.read() #Read The Image From Camera
if(Ret == False): # Can't Read The Image From Camera
print("Failed To Capture The Camera")
break
cv.imshow('Color', Image_Frame) #Show The Read Image
key = cv.waitKey(1)
if(key == 27): #If Key is ESC And Break The Loop
break
cap.release() #Close The Accss Camera
cv.destroyAllWindows()
openCV의 핵심이라고 불리우는 실시간 영상 처리 코드이다.
영상을 다루기 위해서 cv.VideoCapture이라는 함수를 사용하여 object를 생성해야한다.
나는 책에 cv.VideoCapture라고 나와있어 배우는 입장이기에 그대로 따라하였지만
cv2.VideoCapture라고 써도 상관없다.
밑에 주석도 꼼꼼하게 써놨으니 심심할 때 읽어본다면
도움이 될 것이다😒
cap.read라는 Function은 Frame 단위로 Image를 읽어드릴 때 사용한다.
cap.release는 cv.VideoCapture을 통해서 Acess된 Camera Index를 Close할때 사용한다.
다른 부분은 위에 코드와 상당히 비슷한 부분이 많아서
위 코드에 설명은 여기까지 하겠다.
import cv2 as cv
cap = cv.VideoCapture(0)
if cap.isOpened() == False:
print("Failed Open The Camera")
exit(1)
ret, Img_Read = cap.read()
if ret == False:
print("Faild Capture The Image")
exit(1)
codec = cv.VideoWriter_fourcc('M', 'J', 'P', 'G') #Set The Codec Ex) MJPG, X264, WMV1...
fps = 30.0 # Set The Video Frame
h,w = Img_Read.shape[:2] # Set The Video Size
writer = cv.VideoWriter("Output.avi", codec, fps, (w,h)) #Save The Video Obeject
if writer.isOpened() == False: #Failed To Make Object
print("Can't Prepare The Video File")
exit(1)
while(True):
ret, Img_Read = cap.read()
if ret == False:
print("Failed Capture")
break
writer.write(Img_Read) #Save The Video
cv.imshow('Color', Img_Read) # Show The Video
Key = cv.waitKey(1)
if Key == 27:
break
cap.release()
writer.release() # End Of Save The Video
cv.destroyAllWindows()
드디어 마지막 코드 정리이다.
위 코드는 실시간 영상 처리를 하면서 Video Record를 하는 코드이다.
cv.VideoWriter_fourcc는 Video의 Codec을 정해주는 Function이다.
나는 cv.VideoWriter_fourcc('M', 'J', 'P', 'G')라고 적었지만
cv.VideoWriter_fourcc(*'MJPG')를 적어도 무관하다고 한다.
cv.VideoWriter는 cv2.imwrite와 같이 Video를 저장하는 Object를 만드는 Function이다.
writer.release()는 Video의 끝을 알리는 코드이다.
이해가 안되는 부분은 주석을 잘 보면 이해가 될 것이다 🙉
아마도 다음주에는 영상 처리 기본 개념에서 사용되는
Mat 객체와 Numpy Array에 대해서 공부를 진행할 거 같다.
화이팅🐺
- About Book -
알짜배기 예제로 배우는 openCV
'openCV' 카테고리의 다른 글
[openCV] Draw Function (0) | 2021.02.06 |
---|---|
[ openCV ] Image Operation ( Blending, Operate Image Bit, ROI ) (0) | 2021.02.02 |
[openCV] Binarization (0) | 2021.01.23 |
[openCV] Graphic User Interface (0) | 2021.01.16 |
[openCV] Numpy Array (1) | 2021.01.09 |