본문 바로가기
Study(Data Analysis, OpenCV, Python, AI)/OpenCV-Python

4. OpenCV 인터페이스 기초/사용자 인터페이스 및 I/0 처

by emergensaur 2024. 4. 21.

영상 처리를 간단히 다시 표현하면 2차원 행렬에 대한 연산이라 할 수 있다. 여기에서 행렬에 대한 연산과정에서 행렬 원소의 값이 변한다. 그러나 이 원소 즉, 화솟값들이 행렬연산에 따라서 어떻게 바뀌고 그로 인해 전체 영상에서 어떤 변화가 있는지 바로 이해는 쉽지 않다. 이 글에서는 함수 설명 정리를 위주로 진행 할 것이다.  실제 코드는

 

윈도우 제어

cv2.namedWindow(winname[,flags])→None  윈도우 이름을 설정하고 해당이름으로 윈도우 생성

  • winname(str) 윈도우 이름 
  • flags(int)는 윈도우 크기 조정 

cv2.imshow(winname, mat)→None winname이름의 윈도우에 mat행렬을 영상으로 표시

 

cv2.destroyAllWindows →None 모든 윈도우 파괴

 

cv2.destroyWindow(winname) →None 인수로 지정된 타이틀 윈도우 파괴 

 

cv2.moveWindow(winname, x, y) →None winname이름의 윈도우를 지정 위치인 (x,y)로 이동한다. 윈도우 기준위치는 좌측상단이다. 

 

cv2.resizeWindow(winname,width,height) →None  윈도우의 크기를 재조정 한다. 

 

이벤트 처리

cv2.waitKey([,delay])->retval 키보드 이벤트 대기하는 함수로 윈도우를 계속 보이도록 하는 역할이다.

 

cv2.setMouseCallback(windowName, onMouse, param=None)→None 사용자가 정의한 마우스 콜백함수를 시스템에 등록

  • OnMouse(event, x,y, flags, param = None)  발생한 마우스 이벤트 처리와 제어를 구현하는 콜백 함수이다. setMouseCallback()함수의 두번째 인수의 구현부이다.

cv2.createTrackbar(trackbarname, winname, value count, onChange)→None  트랙바를 생성한 후 지정한 윈도우에 추가하는 함수이다. getTrackbarPos또는 setTrackbarPos를 통해 전달 받아 슬라이더 위치를 반환하고 설정한다. 

 

그리기 

cv2.line(img, pt1, pt2, color[, thickness[,lineType[,shift]]]→img pt1에서 pt2를 잇는 직선을 그린다. 

(50, 200, 200, 100) # 사각형 영역-4원소 튜플 - 시작 x, y ,여기서 x 방향(가로 우측 증가), y방향(세로 아래로)

 

cv2.putText(img, text, org, fontFace, fontScale, color[,thickness[,lineType[,bottomLeftOrigin]]])→img text문자열을 org 좌표에 color 색상으로 그린다. 

 

cv2.circle(img, center, radius, color[, thickness[,lineType[,shift]]])→img center를 중심을 radius반지름 원을 그린다.  두께가 -1 이면 채운다. 

 

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[,thickness[,lineType[,shift]]])→img 

center를 중심으로 axes크기의 타원을 그린다. axes는 타원을 절반크기 angle은 타원의 각도이고 시계방향으로 회전한다.

영상파일 처리

영상처리는 화소값으로 구성된 2차원 배열에 대한 조작이다. 따라서 행렬 처리는 매우 중요하다. 영상파일을 읽어와 행렬에 저장하고 행렬 연산과정에서 행렬의 원소, 즉 화소값들이 표시된 영상을 필요시 눈으로 직접 확인이 가능해야 한다.

cv2.imread(filename[,flags])→retval  지정한 영상파일로 부터 영상을 적재한 후 행렬로 반환한다. flags는 컬러타입 결정 상수

cv2.imwrite(filename, img[,params]) →retval  img 행렬을 지정한 영상파일로 저장한다. filename는 저장할파일 이름, 확장자 명에 따라 영상 파일 형식을 결정한다. 

OpenCV imread 에러가 발생할 수 있다. 경로에 한글이 들어가서는 안되고, 슬래시는 /를 사용해야 한다.

 

cv2. 이후 상수 사용하는 건 상식..!

행렬의 컬러타입 결정 상수

  1. IMREAD_UNCHANGED 입력영상 정의 타입 영상 그대로 반환 
  2. IMREAD_GRAYSCALE : 명암도 영상으로 변환해 반환
  3. IMREAD_COLOR: 컬러영상으로 변환하여 반환 
  4. IMREAD_ANYDEPTH: 깊이에 따라 16, 32비트로 변환
  5. IMREAD_ANYCOLOR: 입력 파일에 정의된 타입의 영상을 반환 

압축 형식의 사용되는 params 인수 튜플이다. 

  1. IMWRITE_JPEG_QUALITY: JPG파일 화질이 높을수록 화질 좋다.
  2. IMREAD_PNG_COMPRESSION : PNG 파일 압축레벨 높을 수록 영상 용량은 적어지고 압축 시간이 길어진다. 
  3. IMWRITE_PXM_BINARY: PPM, PGM파일의 이진 포맷 설정을 진행한다. 

비디오 처리

비디오 파일에서 영상 프레임을 받아 영상 처리를 위해서는 파일에 따른 코덱을 통해서 압축을 해제해야 한다. cv2.VideoCapture 클래스로 카메라나 동영상 파일에서 프레임을 읽어올 수 있다. 또한 cv2.VideoWriter 클래스로 행렬로 된 영상들을 동영상 파일로 저장하는 것이 가능하다. 

 

cv2.VideoCapture()→<VideoCapture object>

cv2.VideoCapture(filename) →<VideoCapture object> 

cv2.VideoCapture(device) →<VideoCapture object>

생성자, 3가지 비디오 객체 선언 방법을 지원한다.  filenname 개방할 동영상 파일의 이름 혹은 영상 시퀀스

device 개방할 동영상 캡처 장치의 ID 카메라 한대만 연결하면 0으로 지정함 

cv2.VideoCapture.open(filename) →retval 

cv2.VideoCapture.open(device) →retval 

동영상 캡처를 위한 동영상 파일 혹은 캡처 장치를 개방한다.

cv2.VideoCapture.isOpened()→retval 

캡처 장치의 연결 여부를 반환한다.

cv2.VideoCapture.release()→None

동영상 파일이나 캡처 장치를 해제한다. 

cv2.VideoCapture.get(propld)→retval 

비디오 캐처의 속성 식별자로 지정된 속성의 값을 반환한다. 캡처장치가 제공하지 않는 속성은 0을 반환

cv2.VideoCapture.set(propld,value)→retval

 

지정된 속성 식별자로 비디오 캡처 속성을 설정한다. value는 속성의 값 propld는 속성 식별자

retrive([,image[, flag]])→retval, image

설명: grab()으로 잡은 프레임을 디코드 해서 image 행렬로 전달한다.

cv2.VideoCapture.read([image])→retval, image 

캡처 장치나 동영상 파일에서 다음 프레임을 잡아 디코드 해서 image행렬로 전달한다.

cv2.VideoWriter([filename, fourcc, fps, frameSize[,isColor]])→<VideoWriter object>

cv2.VideoWriter.open(fillename, fourcc, fps, frameSize[,isColor])→retval

(출력될 동영상 파일 이름, 프레임 압축 코덱4문자, 초당 프레임 수, 동영상 프레임의 크기, 컬러여부)

cv2.VideoWriter.isOpened() →retval

동영상 파일이 열려있는지 확인 

cv2.VideoWriter.open()

영상을 동영상 파일의 프레임으로 저장하기 위해 동영상 파일을 개방한다. 인수는 생성자의 인수와 동일하다.

cv2.VideoWriter.isOpened()

동영상 파일 저장을 위해 VideoWriter 객체의 개방여부를 확인한다. 

 

Matplotlib 패키지 활용

pyplot.figure(num=None, figsize = None, dpi =None)→matplotlib.figure.Figure

그림(Figure) 객체를 생성해서 플롯(plot)을 그릴 수 있게 한다. 인수 =  (그름 이름 또는 정수, 그림 크기, 그림 해상도)

pyplot.imshow(X, cmap=None, norm=None, aspect = None, interpolation=None, alpha=None)→(matplotlib.image.AxesImage) 

x에 대해서 y값으로 그래프를 그려준다. args = x,y,fmt순으로 인수 작성 fmt는 선을 나타내는 문자열

scalex, y x,y축 크기 자동조절 독립변수, kwargs 라인 속성을 각 인수 별로 지정한다. 

pyplot.subplot(*args, **kwargs) →matplotlib.image.axes._subplots.AxesSubplot

현재 그림에 서브 플롯을 추가한다. (args는 행, 열, 순번지정 , kwargs는 라인 속성)

pyplot.title(label, fontdict =None, loc='center')→matplotlib.text.Text

서브플롯의 제목 지정 

pyplot.subtitle(t, **kwargs)→matplotlib.text.Text

메임 그림(Figure)의 제목을 지정한다. 

pyplot.tight_layout(pad=1.08, h_pad =None, w_pad=None)→None

자동으로 명시된 여백으로 하위 그래프 파라미터 조정 pad는 여백이다.

pyplot.axis(*args, **kwargs)→tuple([축범위], matplotlib.text.Text)

플롯의 축 정보를 조정한다. (args는 xmin,xmax,ymin,ymax  // kwargs 축과 라벨에 대한 정보 조정)

pyplot.show()→None

그림 객체를 윈도우에 띄움

pyplot.subplots(nrows=1, ncols=1, **fig_kw)→tuple(Figure, ndarray[AxesSubplot, ..])

그림객체와 서브플롯들을 생성한다. (서브 플롯 격자 행 수 , 서브 플롯 격자 열 수, 추가 키워드 인수)

pyplot.savefig(*args, **kwargs)

그림 객체를 영상 파일로 저장한다. 

'Study(Data Analysis, OpenCV, Python, AI) > OpenCV-Python' 카테고리의 다른 글

07.영역 처리  (0) 2024.04.29
06. 화소 처리  (0) 2024.04.29
5. 기본 배열 연산(Operation)함수  (0) 2024.04.28
2,3. OpenCV와 Python  (0) 2024.04.18
1. 영상 처리 개요  (0) 2024.04.17