https://blog.naver.com/pnylove12/222020034138
https://blog.naver.com/pnylove12/222020065444
https://blog.naver.com/pnylove12/222020098487
https://blog.naver.com/pnylove12/222020175069
https://blog.naver.com/pnylove12/222022890498
https://blog.naver.com/pnylove12/222020492702
오늘은 OpenCV 를 통해 이미지를 이진화하는 방법을 익혔다. Binarization, 즉 이진화는 그레이 스케일 이미지를 흰색과 검은색으로 구성된 바이너리 이미지로 바꾸는것 이다.영상처리 알고리즘을 적용하기 전, 전처리 단계로 사용되며, 배경과 오브젝트를 구분하여
우선 색공간이란 색을 표현하는 방법을 3차원 좌표계로 표현한 것이다. 그 중 RGB 와 HSV 색공간이 존재한다.먼저 RGB 는 빛의 삼원색인 빨강, 초록, 파랑을 이용하여 색을 표현하는 방식이다. 따라서 총 세 채널로 구성되어있으며, 각 채널은 0-255 의 범위를
시작하기 그 전 포스팅에서는 파란색의 범위를 코드에서 미리 지정하여 실행했다면, 여기에 마우스 클릭 이벤트를 추가하여, 동적으로 범위를 지정한 후 특정 색을 추출해보았다. 사용 코드 정리 if event == cv.EVENT_LBUTTONDOWN: 먼저, 이벤
사진이 아닌 실시간으로 비추어지는 영상에 대해 처리를 하고 싶다면, 웹캠을 연결하여 카메라 화면으로 보여지는 영상을 가져올 수 있다.cap = cv.VideoCapture(0)VideoCapture 함수를 통해 연결되어있는 첫번째 캠과 연결한다.ret, cam = ca
컨투어(contour) 란, 윤곽이라는 뜻이다. OpenCV 에서 영상이나 이미지의 외곽 혹은 내곽을 검출해낼 수 있다. findContours 함수를 통해 이진화 이미지에서 윤곽선을 찾아낸다. contours, hierarchy = cv.findContours(ima
2차원 평면 위에 있는 점의 좌표를 표현하는 템플릿 클래스, Point\_클래스에는 2차원 좌표를 나타내는 x와 y라는 멤버변수를 가짐처음 Point를 선언하면 각 좌표는 0으로 초기화 되고, 두번째 행에서 5와 10을 대입하여 (5,10) 좌표를 나타내도록 함pt2
\*\* 본내용은 OPENCV 4로 배우는 컴퓨터 비전과 머신러닝 도서 내용을 정리한 내용입니다.행렬을 표현하는 클래스로, 2차원 행렬뿐 아니라 고차원의 행렬또한 표현할 수 있다. 정수, 실수, 복소수 등으로 구성된 행렬 또는 벡터를 저장하거나, 그레이 스케일 또는 컬
📔 Vec 클래스 하나의 행으로만 이루어진 행렬은 행벡터, 하나의 열로만 구성된 행렬은 열벡터이다. 행벡터와 열벡터를 합쳐서 벡터 혹은 벡터 행렬이라 부른다. 벡터는 같은 자료형을 가진 원소 몇개로 구성된 데이터 형식이다. Vec 클래스는 Matx 클래스를 상속받
mask 이미지를 그레이 스케일로 변환하고, mat에서 0이 아닌 값들이 있는 위치에 src 에서 노란색으로 바꾸어 show 한다.파라미터로 (OutputArray m, InputArray mask) 를 받고, mask 는 행렬 원소 값이 0이 아닌 좌표에서만 행렬 원
21.3.10 이후 업로드된 본 블로그의 openCV 게시글은 모두 < OPENCV 4로 배우는 컴퓨터 비전과 머신러닝 > 도서를 정리한 내용입니다.입력 영상의 모든 픽셀에 일정 값을 더하거나 빼면 영상의 밝기를 조절할 수 있다. 양수 값을 더하면 영상이 밝아지고
명암비란 영상에서 밝은 영역과 어두운 영역사이에 드러나는 밝기 차이의 강도를 의미하고, 명암 대비 또는 콘트라스트 라고도 한다. 밝은 영역과 어두운 영역이 골고루 섞여 있으면 명암비가 높다고 말한다. 영상의 밝기 조절은 모든 픽셀에서 정수 값을 더하거나 빼는 연산을 했
영상의 히스토그램 이란 영상의 픽셀 값 분포를 그래프 형태로 표현한 것이다. 그레이스케일 영상의 경우, 각 그레이스케일 값에 해당하는 픽셀의 개수를 구하고 이를 막대 그래프 형태로 표현할 수 있다. 컬러 영상에 대해서도 세개의 색상 성분 조합에 따른 픽셀 개수를 계
\*\* OPENCV 4로 배우는 컴퓨터 비전과 머신러닝 도서 정리내용영상처리에서 필터링이란 영상에서 원하는 정보만 통과시키고 원치 않는 정보는 걸러 내는 작업이다. 보통 마스크 라고 부르는 작은 크기의 행렬을 이용한다. 마스크는 필터링의 성격을 정의하는 행렬이며 커널
블러링은 초점이 맞지 않은 사진처럼 영상을 부드럽게 만드는 필터링 기법이며 스무딩이라고도 한다. 영상에서 인접한 픽셀 간의 픽셀 값 변화가 크지 않은 경우 부드러운 느낌을 받을 수 있다.블러링 필터 중 단순하고 구현하기 쉬운 평균값 필터이다. 입력영상에서 특정 픽셀과
샤프닝 기법은 블러링과 반대되는 개념으로, 초점이 잘 맞은 사진처럼 사물의 윤곽이 뚜렷하고 선명한 느낌이 나도록 하는 것이다. 영상 에지(밝기가 급격이 변하는 부분) 근방에서 픽셀 값의 명암비가 커지도록 해야한다. 블러링이 적용된 영상, 즉 날카롭지 않은 영상을 언샤프
📚 잡음 추가하기 신호 처리 관점에서 잡음이란 원본 신호에 추가된 원치 않은 신호를 의미한다. 영상에서 잡음은 주로 영상을 획득하는 과정에서 발생하며, 디지컬 카메라에서 사진을 촬영하는 경우에는 광학적 신호를 전기적 신호로 변환하는 센서에서 주로 잡음이 추가된다.
어파인 변환 어파인 변환은 영상의 평행 이동, 확대 및 축소, 회전 등의 조합으로 만들 수 있는 기하학적 변환을 나타낸다. 기하학적인 변환은 픽셀 값은 그대로 유지하면서 위치만을 변경시키는 작업이다. 기하학적 변환 중 어파인 변환은 영상을 평행이동시키거나 회전, 크기
결과영상의 원소값에 sum을 넣을때 at함수를 쓰니 자꾸 오류가 났다. 디버깅으로 오류의 원인을 찾아보니 dst객체에 아무것도 들어 있지 않아서 였다. 그래서 처음에 dst에 입력 영상을 저장하고 나중에 원소값을 바꾸는 방식으로 진행했다. 마스크 행렬을 int 배열로
영상의 기하학적 변환 중 어파인 변환보다 자유도가 높은 투시변환이 있다. 투시변환은 직사각형 형태이 영상을 임의의 볼록 사각형 형태로 변경할 수 있는 변환이다. OpenCV에서는 투시변환 행렬을 구하는 함수와, 투시변환 행렬을 이용하여 실제 영상을 투시 변환하는 함수를
미분과 그래디언트 영상에서 에지는 한쪽방향으로 픽셀 값이 급격하게 바뀌는 부분을 가리킨다. 영상에서 에지를 찾아내는 작업은 객체의 윤곽을 알아낼 수 있는 유용한 방법이다. 픽셀 값의 변화율을 측정하여 변화율이 큰 픽셀을 선택해야 한다. 따라서 주어진 함수의 순간 변화
캐니 에지 검출기 그래디언트 크기만을 기준으로 에지 픽셀을 검출하면 임계값에 민감하고 에지 픽셀이 두껍게 표현되는 문제점이 있다. 그래서 캐니는 자신의 논문에서 다음 세가지 항목을 좋은 에지검출기의 조건으로 제시하였다. 1. 정확한 검출 : 에지를 검출하지 못하거나
허프 변환 직선 검출 영상에서 직선 성분을 찾기 위해서는 우선 에지를 찾아내고, 에지 픽셀들이 일직선상에 배열되어 있는지를 확인해야 한다. 영상에서 직선을 찾기위한 용도로 허프 변환 기법이 사용되고 있다. 허프 변환은 2차원 xy좌표에서 직선의 방정식을 파라미터 공간
중심좌표가 (a, b) 이고 반지름이 r인 원의 방정식은 다음과 같다.(x - a)^2 + (y - b)^2 = r^2원의 방정식은 파라미터가 세개이고, 허프변환을 그대로 적용하려면 3차원 파라미터 공간에서 축적배열을 정의하고 가장 누적이 많은 위치를 찾아야 한다. 그
mat 객체를 생성할때 사용하는 imread()함수의 두번째 파라미터를 IMREAD_COLOR로 설정하면 영상을 3채널 컬러 영상 형식으로 불러온다.일반적으로 컬러영상은 흔히 RGB라고 부르는 빨간색, 녹색, 파란색 색상 성분의 조합으로 픽셀 값을 표현한다. 그러나 o
영상의 이진화는 영상의 각 픽셀을 두 개의 부류로 나누는 작업이다. 예를 들어 입력 영상을 주요 객체 영역과 배경 영역으로 나누거나 또는 영상에서 중요도가 높은 관심영역(ROI) 과 그렇지 않은 비관심 영역으로 구분하는 용도로 이진화가 사용될 수 있다.기본적으로 영상의
모폴로지 연산 모폴로지 연산은 영상 내부 객체의 형태아 구조를 분석하고 처리하는 기법이다. 주로 이진화된 영상에서 객체의 모양을 변형하는 용도로 사용된다. 객체모양 단순화, 잡음 제거 먼저 구조 요소를 정의해야한다. 대부분의 모폴로지 연산에서는 3x3 정방형 구조
레이블링 이진화를 통해 주요 객체와 배경 영역을 구분할 수 있다. 배경과 객체를 구분하였다면 다시 각각의 객체를 구분하고 분석하는 작업이 필요하다. 이때 사용할 수 있는 기법이 레이블링이다. 영상내에 존재하는 객체 픽셀 집합에 고유 번호를 매기는 작업으로 '연결된 구
외곽선 검출 객체의 외곽선은 객체 영역 픽셀 중에서 배경 영역과 인접한 일련의 픽셀을 의미한다. 보통 검은색 배경 안에 있는 흰색 객체 영역에서 가장 최외곽에 있는 픽셀을 찾아 외곽선으로 정의한다. 만약 흰색 객체 영역 안에 검은색 배경영역인 홀이 존재하면 홀을 둘러
입력 영상에서 작은 크기의 부분 영상 위치를 찾아내고 싶은 경우에 주로 템플릿 매칭 기법을 사용한다. 여기서 템플릿은 찾고자 하는 대상이 되는 작은 크기의 영상을 의미한다. 템플릿 매칭은 작은 크기의 템플릿 영상을 입력 영상 전체 영역에 대해 이동하면서 가장 비슷한 위
QR코드 QR코드는 흑백 격자 무늬 모양의 2차원 바코드 일종으로 숫자, 영문자, 8비트 문자, 한자 등의 정보를 저장할 수 있다.
해리스 코너 검출 방법 템플릿 매칭의 한계점을 해결하기 위해 두 영상 사이에 기하학적 변환이 있어도 효과적으로 사용할 수 있는 지역 특징점 기반 매칭 방법에 대해 살펴본다. 영상에서 특징이란 영상으로부터 추출할 수 있는 유용한 정보를 의미하며, 평균 밝기, 히스토그
OpenCV는 다양한 머신 러닝 알고리즘을 클래스로 구현하여 제공한다. 주로 ml모듈에 포함되어 있고, cv::ml::StatModel 추상 클래스를 상속받아 만들어진다. StatModel 클래스는 train() 멤버함수와 predict() 멤버함수를 가지고 있다. s
Knearest 객체를 생성val : kNN알고리즘에서 사용할 k값val : 이 값이 true이면 분류(classification), false이면 회귀(regression)으로 사용한다.samples : 테스트 데이터 벡터가 행단위로 저장된 행렬.k : 사용할 최근접
digits.png 숫자 영상의 전체 크기는 2000x1000이며, 단순히 20x20 숫자 영상 픽셀 값 자체를 kNN 알고리즘 입력으로 사용한다. 총 400개의 숫자값을 1x400 행렬로 바꾸고, 이것을 모두 세로로 쌓아 전체 숫자 영상 데이터를 표현하는 5000x4