선을 그리려면 두 개의 점, 즉 시작점과 끝점이 필요합니다. 또한 선을 그릴 캔버스 역할을 하는 공간도 마련해야 합니다.OpenCV에서는 행렬(Matrix)이 캔버스 역할을 합니다. 따라서 선의 시작점과 끝점을 정의하고, 선에 적용할 색상과 두께까지 함께 지정해야 합니다. 정리하면, OpenCV로 선을 그리기 위해서는 다음 네 가지 요소가 필요합니다.캔버스 역할을 할 행렬(Mat)선의 시작점(Point)선의 끝점(Point)선의 색상(Scalar)과 두께(int)필수 헤더 파일OpenCV에서 선을 그리려면 반드시 <imgpro
원은 중심점(center)과 반지름(radius)으로 정의됩니다. OpenCV에서 원을 그리려면 먼저 중심 좌표와 반지름 값을 지정해야 하며, circle() 함수가 <imgproc.hpp> 헤더 파일에 정의되어 있으므로 이 헤더를 반드시 포함해야 합니다.기본 문법circle(whiteMatrix, center, radius, line_Color, thickness);매개변수 설명whiteMatrix : 원이 그려질 대상 이미지(Mat 행렬)center : 원의 중심 좌표(Point 타입)radius : 원의 반지름(픽셀
OpenCV에서 타원(ellipse)을 그리려면 중심 좌표, 장축(major axis), 단축(minor axis)이라는 세 가지 핵심 매개변수가 필요합니다. 또한 타원을 그릴 행렬(matrix)을 준비하고, 선 두께와 선 색상도 함께 지정해야 합니다.OpenCV로 타원을 그릴 때는 회전 각도를 지정해야 하며, 여기에 더해 시작점과 끝점이라는 두 개의 추가 매개변수도 필요합니다. ellipse() 함수를 호출하려면 <imgproc.hpp> 헤더 파일을 포함시켜야 한다는 점을 잊지 마세요.기본 문법ellipse(whiteM
사각형을 그리려면 네 개의 점이 필요합니다. 아래 그림을 살펴보세요. 그림에는 x1, x2, y1, y2라는 네 개의 점이 있으며, 이 점들이 사각형의 네 좌표를 구성합니다. OpenCV에서 사각형을 그리려면 이 좌표들을 정의하고, 사각형을 표시할 매트릭스(matrix)가 필요합니다. 또한 선의 색상과 선 두께 같은 관련 값들도 함께 선언해야 합니다. 이 메서드의 기본 문법은 다음과 같습니다. 문법(Syntax) rectangle(whiteMatrix, starting, ending, line_Color, thickness);
OpenCV에서는 putText() 함수를 사용하여 이미지 위에 텍스트를 손쉽게 추가할 수 있습니다. 이 함수는 <imgproc.hpp> 헤더 파일에 정의되어 있으며, 이미지 처리 작업에서 라벨링이나 주석을 달 때 매우 유용하게 활용됩니다.텍스트를 삽입하려면 먼저 이미지를 담을 행렬(Matrix)을 선언해야 합니다. 이번 예제에서는 실제 이미지 파일을 불러오는 대신 흰색으로 채워진 빈 행렬을 생성하고, 그 위에 텍스트를 출력하는 방식으로 진행합니다.텍스트를 행렬에 넣기 위해서는 다음과 같은 요소들을 지정해야 합니다.텍스트
이미지 처리에서 픽셀 값의 구조는 이미지 종류에 따라 다릅니다. 그레이스케일(흑백) 이미지의 경우 각 픽셀은 단일 숫자 값으로 표현되지만, RGB와 같은 컬러 이미지에서는 하나의 픽셀이 세 개의 값으로 이루어진 벡터 형태를 가집니다. 이 세 개의 값은 각각 파란색(B), 초록색(G), 빨간색(R) 채널을 나타냅니다. OpenCV에서는 at() 메서드를 사용하여 특정 위치의 픽셀에 직접 접근하고 값을 수정할 수 있습니다. 이 글에서는 그레이스케일 이미지와 RGB 이미지 모두에서 픽셀 값에 접근하여 무작위로 노이즈를 추가하는 함수를 만
OpenCV에서 픽셀 값을 다룰 때 앞서 살펴본 at 메서드는 픽셀 값에 접근할 때마다 이미지 타입을 일일이 지정해야 한다는 번거로움이 있습니다. 이보다 더 간단하고 직관적인 대안이 바로 직접 접근(Direct Access) 방법입니다. 직접 접근 방법을 사용하려면 Mat<uchar>, Mat<Vec3b>, Mat<Vec2i>와 같이 Mat 타입을 미리 구체적으로 지정해야 합니다. 타입을 지정한 후에는 배열을 다루듯 image(j, i) 형태로 행과 열 인덱스를 사용하여 해당 위치의 픽셀 값에 곧바로
OpenCV에서 특정 픽셀의 값을 읽으려면 at() 메서드와 직접 접근(Direct Access) 방식, 두 가지 방법을 사용할 수 있습니다. 이 글에서는 두 가지 방법을 모두 예제 코드와 함께 자세히 살펴보겠습니다. 방법 1: at() 메서드 사용하기 먼저 at() 메서드부터 알아보겠습니다. 아래 프로그램은 RGB 이미지에서 좌표 (10, 29)에 위치한 픽셀 값을 읽어오는 예제입니다. 예제 코드 #include<iostream> #include<opencv2/highgui/highgui.hpp> using
이미지 처리(Image Processing)에서는 이미지 위에서 다양한 연산을 수행합니다. 더 구체적으로 말하면 연산은 픽셀 단위로 이루어지기 때문에, 이미지의 픽셀 수가 많아질수록 연산에 소요되는 시간도 그만큼 늘어납니다. 따라서 연산 시간을 줄이려면 이미지를 효율적으로 스캔하는 것이 필수적입니다. 이번 글에서는 포인터(pointer)를 활용해 효율적인 이미지 스캔 루프를 구현하는 방법을 알아보겠습니다.색상 감소(Color Reduction)란?여기서는 색상 감소 전략을 예로 들어 픽셀 스캔 과정을 살펴보겠습니다. RGB 이미지와
OpenCV에는 C++ STL(표준 템플릿 라이브러리)과 호환되는 Mat 이터레이터(Mat_<Vec3b>::iterator) 클래스가 내장되어 있습니다. 이 클래스를 활용하면 복잡한 포인터 연산 없이도 이미지의 모든 픽셀에 손쉽게 접근할 수 있습니다. Mat 이터레이터의 기본 개념 이터레이터를 사용하려면 먼저 Mat 이터레이터 클래스의 객체를 생성해야 합니다. 객체는 다음과 같은 형태로 선언합니다. Mat_<Vec3b>::iterator example; 여기서 주목해야 할 점은 두 가지입니다. 첫째, Mat
이미지의 밝기를 변경한다는 것은 픽셀 값을 변경하는 것을 의미합니다. 즉, 각 픽셀의 현재 값에 특정 정수 값을 더하거나 빼는 작업입니다. 모든 픽셀에 정수 값을 더하면 이미지가 더 밝아지고, 반대로 일정한 값을 빼면 밝기가 어두워집니다. 이번 글에서는 먼저 밝기를 높이는 방법을 알아보고, 다음으로 밝기를 낮추는 방법을 살펴보겠습니다.밝기 높이기OpenCV를 사용해 밝기를 높이는 것은 매우 간단합니다. 각 채널에 추가 값을 더하기만 하면 밝기가 증가합니다. 예를 들어 BGR 이미지는 파랑(B), 초록(G), 빨강(R) 세 개의 채널
OpenCV에서 이미지의 밝기를 줄이는 방법은 밝기를 높이는 방법과 매우 유사합니다. 두 방법의 유일한 차이점은 연산 방향에 있습니다. 밝기를 높일 때는 이미지에 Scalar(B, G, R) 값을 더하지만, 밝기를 줄일 때는 이미지에서 스칼라 값을 빼주면 됩니다.즉, 각 픽셀의 B(파랑), G(초록), R(빨강) 채널 값에서 동일한 크기의 값을 차감하면 전체적으로 어두운 이미지가 생성됩니다.핵심 원리OpenCV에서 이미지는 Mat 객체(행렬)로 표현되며, 행렬과 스칼라 값 사이의 산술 연산을 지원합니다. 따라서 original -
이미지 처리에서 밝기와 대비(Contrast) 조절은 가장 자주 사용되는 편집 효과 중 하나입니다. 이번 글에서는 OpenCV를 활용해 이미지의 대비를 변경하는 방법을 알아보겠습니다. 대비는 이미지의 선명도를 결정하는 핵심 요소입니다. 대비가 높을수록 이미지는 더욱 선명하고 또렷해지며, 반대로 대비가 낮을수록 이미지는 부드럽고 흐릿한 느낌을 줍니다. 대비 변경의 원리 대비를 변경한다는 것은 픽셀 값의 가중치를 높이는 것을 의미합니다. 구체적인 구현 방법은 간단합니다. 이미지의 모든 픽셀 값에 특정 상수를 곱하면 됩니다. 예를 들어,
히스토그램은 이미지의 명도(밝기 강도) 분포를 나타내는 그래프입니다. 예를 들어, 색상 깊이가 8비트인 이미지를 생각해 보겠습니다. 이는 모든 픽셀이 0부터 255까지의 색상 값을 가질 수 있다는 의미입니다. 만약 이미지가 RGB 이미지라면 빨강(Red), 초록(Green), 파랑(Blue) 세 개의 채널로 구성됩니다. 예를 들어, 이미지의 특정 지점에 빨간색만 존재한다면 해당 픽셀의 색상 정보는 빨간색 채널에 기록되며, 값은 0부터 255 사이에서 변합니다. 여기서 0은 빨간색이 전혀 없음을, 255는 빨간색이 가장 진함을 의미합
이미지의 히스토그램(histogram)은 픽셀 강도(intensity) 값의 빈도를 시각적으로 보여주는 도구입니다. 이미지 히스토그램에서 X축은 회색조 명도(그레이 레벨)를 나타내며, Y축은 해당 명도가 나타나는 빈도를 나타냅니다.히스토그램 평활화(Histogram Equalization)는 이미지의 명도 범위를 넓혀 전체적인 대비(contrast)를 개선하는 대표적인 영상 처리 기법입니다. OpenCV에서는 equalizeHist() 함수를 사용하여 주어진 이미지의 히스토그램을 손쉽게 평활화할 수 있습니다.기본 문법equalize
이 글에서는 기본(default) 카메라에 접근하여 해당 카메라의 비디오 스트림을 화면에 출력하는 방법을 알아봅니다. 노트북의 경우 내장 웹캠이 일반적으로 기본 카메라로 인식되며, 데스크톱의 경우 카메라가 연결된 시리얼 포트의 순서에 따라 기본 카메라가 결정됩니다. 기본 웹캠에서 비디오 스트림을 캡처할 때는 카메라의 세부 사양이나 모델 정보를 알 필요가 없으며, 단지 카메라가 제대로 연결되어 있는지만 확인하면 됩니다. 실시간 비디오 스트림 캡처 예제 다음 프로그램은 기본 카메라로부터 비디오 스트림을 받아 실시간으로 화면에 표시합니다
이 글에서는 OpenCV를 사용하여 기본 카메라가 아닌 다른 카메라에서 영상을 캡처하는 방법을 알아봅니다. 다행히 다른 카메라에 접근하는 방법은 기본 카메라에 접근하는 방식과 거의 동일합니다. 유일한 차이점은 VideoCapture cap(0) 대신 원하는 카메라 번호를 직접 지정해야 한다는 점입니다.카메라 번호는 USB 포트에 연결된 순서를 따릅니다. 예를 들어 카메라가 세 번째 USB 포트에 연결되어 있다면 해당 카메라의 번호는 3이 됩니다. 이러한 방식을 활용하면 웹캠 여러 대나 외부 카메라 모듈을 상황에 맞게 선택적으로 사용
이번 글에서는 OpenCV를 사용하여 비디오 파일을 불러오고 재생하는 방법을 알아보겠습니다. 이전 주제에서 배운 카메라 영상 처리 방식과 거의 동일한 절차를 따르지만, 한 가지 중요한 차이점이 있습니다. VideoCapture 클래스 객체의 인자에 숫자(카메라 인덱스) 대신 재생하려는 비디오 파일의 경로를 지정해야 한다는 것입니다.기본 원리OpenCV에서 웹캠과 같은 기본 카메라를 사용할 때는 VideoCapture cap(0);처럼 장치 번호를 넘겼습니다. 하지만 컴퓨터에 저장된 비디오 파일을 재생할 때는 파일명 또는 전체 경로를
OpenCV의 set() 함수를 활용하면 비디오 프레임의 가로(너비)와 세로(높이)를 자유롭게 설정할 수 있습니다. 아래 두 줄의 코드가 바로 비디오 프레임의 크기를 지정하는 부분입니다. set(CAP_PROP_FRAME_WIDTH, 320); set(CAP_PROP_FRAME_HEIGHT, 240); 첫 번째 줄은 프레임의 너비를 320픽셀로 설정하고, 두 번째 줄은 높이를 240픽셀로 설정합니다. 이 두 코드가 함께 적용되면 320 x 240 해상도의 비디오 스트림이 생성됩니다. 이처럼 OpenCV를 사용하면 간단한 코드
비디오를 저장하려면 먼저 몇 가지 필수 요소를 지정해야 합니다. 첫째, 저장할 파일의 위치와 이름을 정해야 합니다. 둘째, FourCC(Four Character Code, 4문자 코드)를 명시해야 합니다. FourCC는 데이터 형식을 식별하는 4바이트 문자 시퀀스로, 코덱 정보를 나타냅니다. 예를 들어 MP4 파일에는 mp4v, AVI 파일에는 MJPG 같은 코드가 사용됩니다.셋째, 비디오의 FPS(초당 프레임 수)를 선언해야 하고, 마지막으로 프레임 크기(가로·세로 해상도)도 지정해야 합니다. 이 네 가지 요소가 모두 갖춰져야