본문 바로가기

OpenCV

OpenCV에서 프레임 단위 영상 처리 기법 영상은 빠르게 연속되는 정지 화면(프레임)들의 모음이기 때문에, 원하는 효과나 분석을 적용하려면 프레임 단위로 작업을 수행해야 합니다. 이 글에서는 프레임 단위 처리의 개념, 기본 구조, 활용 가능한 전처리/후처리까지 다뤄볼께요.프레임 단위 처리란 무엇인가요?영상은 기본적으로 연속된 이미지들의 흐름으로,이를 처리하려면 프레임(Frame) 단위로 반복 수행하는 구조를 가져야 해요. 대부분의 영상 처리 작업은 이미지 한 장을 다루는 것처럼 구성되지만,이걸 반복해서 매 프레임에 적용하는 것이 핵심이에요.대표적인 활용 사례로는 실시간 객체 감지, 영상 필터링, 추적, 효과 적용 등이 있어요. OpenCV에서는 VideoCapture로 프레임을 하나씩 가져오고,read() 또는 >> 연산자로 처리해요.즉, 하.. 더보기
OpenCV로 영상 저장하기: VideoWriter 사용법 실시간 웹캠 영상이나 가공된 이미지를 파일로 저장할 수 있는 핵심 도구인 OpenCV의 VideoWriter 클래스는 단순한 영상 저장을 넘어서, 코덱 설정, 프레임 속도 지정, 해상도 유지 등 다양한 컨트롤을 가능하게 해요. VideoWriter란 무엇인가요?cv::VideoWriter는 OpenCV에서 영상 파일을 생성하고 프레임을 저장하는 클래스예요.이미지 시퀀스를 영상으로 만들거나 실시간으로 처리한 프레임을 동영상으로 저장할 때 사용돼요. VideoWriter를 제대로 쓰기 위해선 출력 파일 이름, 코덱, 프레임 속도, 해상도 같은 필수 정보를 설정해야 해요. 특히 해상도는 입력 프레임의 크기와 정확히 일치해야 하며,그렇지 않으면 저장이 실패하거나 영상이 깨질 수 있어요.일반적으로 .avi, .m.. 더보기
OpenCV VideoCapture 클래스 이해 및 활용 OpenCV VideoCapture 클래스 이해 및 활용 실시간 영상 처리의 핵심 클래스인 OpenCV VideoCapture 클래스는 웹캠, 동영상 파일, IP카메라 스트림 등 다양한 영상 소스를 다루는 핵심 인터페이스예요. 영상 처리의 시작은 VideoCapture에서 시작된다고 해도 과언이 아니예요. VideoCapture란 무엇인가요?cv::VideoCapture는 영상 소스를 불러오는 데 사용하는 클래스예요.이 클래스는 카메라 번호(예: 0, 1), 영상 파일 경로,혹은 RTSP 스트림 주소 등을 받아서 프레임을 하나씩 읽어올 수 있게 해줘요.실시간 웹캠 영상 처리뿐만 아니라,저장된 동영상을 분석하거나 네트워크 영상 스트림을 처리할 때도모두 이 클래스를 활용해요. 생성자나 .open() 메서드.. 더보기
OpenCV로 실시간 웹캠 캡처하기 OpenCV는 카메라를 쉽게 제어할 수 있는 인터페이스를 제공하기 때문에, 실시간 영상 처리를 시작할때 매우 유용합니다. 웹캠 캡처를 위한 기본 구조 이해하기OpenCV에서 웹캠을 사용하려면 cv::VideoCapture 클래스를 활용해요.기본 웹캠은 0번 인덱스로 접근하고, 여러 개의 카메라가 연결된 경우 1, 2 등으로 지정할 수 있어요. 카메라가 정상적으로 열렸는지 확인하는 것이 중요하며,연속된 프레임을 읽어 들이는 루프가 기본 구조예요.이 루프 안에서 이미지 처리, 키보드 이벤트 처리, 저장 등이 가능하죠. cv::VideoCapture cap(0); if (!cap.isOpened()) { std::cerr return -1; }프레임을 읽고 화면에 출력하기웹캠이 정상적으로 연결.. 더보기
OpenCV에서 히스토그램 역투영 기법 사용하기 히스토그램 역투영(Back Projection) 기법을 활용한 객체 검출 기법은특정 색상 분포를 가진 물체를 찾는 데 효과적인 방법으로,특히 사람 피부색 추적, 물체 추적, 영상 세분화 등에 활용돼요. 이미지의 픽셀 분포를 분석해서 비슷한 색상의 영역을 강조하는 방식이기 때문에, 색상 기반 검출에서 매우 유용합니다.히스토그램 역투영이란?히스토그램 역투영(Back Projection)은 기준이 되는 색상의 히스토그램을 먼저 학습하고,이를 기반으로 전체 이미지에서 유사한 색상 분포를 가진 영역을 찾아내는 기법이에요.쉽게 말해 “이 색깔이 어디에 퍼져 있는지”를 시각적으로 나타내주는 방법이죠. 특히 색상이 뚜렷한 물체나 피부, 배경과 구분되는 색상을 가진 객체를 찾는 데 효과적이에요.OpenCV에서는 cal.. 더보기
OpenCV를 활용한 템플릿 매칭 방법 템플릿 매칭은 복잡한 전처리 없이도특정 이미지 조각이 큰 이미지 안에서 어디에 위치해 있는지를찾을 수 있는 간단하지만 유용한 기법입니다.특히 UI 자동화, 부품 검사, 아이콘 추적, 게임 화면 분석 등에 자주 활용되요. 템플릿 매칭이란 무엇인가요?템플릿 매칭은 하나의 작은 이미지(템플릿)를 큰 이미지 안에서 찾아내는 기법이에요.일치하는 위치를 찾기 위해 슬라이딩 윈도우 방식으로 비교가 진행되며,정확히 일치하거나 유사한 패턴을 찾는 데 유용해요. 이미지의 회전이나 크기 변화에는 민감하지만,간단하고 직관적인 구조 덕분에 다양한 분야에서 쓰이고 있어요. OpenCV에서는 matchTemplate() 함수를 통해 쉽게 구현할 수 있고,결과는 유사도 맵 형태로 반환돼요.가장 유사한 좌표를 찾으려면 minMaxLo.. 더보기
OpenCV에서 윤곽선(contour) 검출과 그리기 윤곽선이란 무엇인가요?윤곽선(Contour)은 이미지에서 같은 색이나 밝기를 가진 경계선을 따라 연결된 곡선 형태예요. 쉽게 말해, 물체의 테두리를 찾아서 좌표로 표현한 것이죠.OpenCV에서는 findContours() 함수를 사용해서이진 이미지로부터 윤곽선을 추출하고,drawContours()로 이를 시각화할 수 있어요. 보통 Canny 엣지나 Threshold를 적용한 후에 윤곽선을 검출합니다. 윤곽선 검출 기본 예제cv::Mat img = cv::imread("sample.jpg"); cv::Mat gray, binary; cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY); cv::threshold(gray, binary, 128, 255, cv::THRESH_BI.. 더보기
OpenCV Mat 클래스 구조와 메모리 이해 Mat 클래스란 무엇인가요?OpenCV에서 Mat은 이미지 데이터를 저장하는 핵심 클래스예요.말 그대로 ‘매트릭스(Matrix)’의 줄임말로,사진이나 영상은 결국 수많은 픽셀 값들이 모여 있는 2차원 배열이기 때문에 Mat으로 표현할 수 있어요. 단순히 사진뿐만 아니라, 그레이스케일 이미지, 마스크 이미지, 필터 결과까지도 다 Mat 객체에 저장된다고 보면 됩니다. Mat의 구조: 데이터 + 정보Mat 객체는 크게 두 가지로 나눠볼 수 있어요.하나는 픽셀 데이터 자체, 다른 하나는 데이터에 대한 정보(header)예요.이 header에는 이미지의 크기(rows, cols), 채널 수, 데이터 타입(CV_8UC3 등), 참조 횟수(refcount) 같은 정보가 들어 있어요.중요한 점은, OpenCV는 .. 더보기