[C++ opencv] 관심영역 Region of Interest (RoI) 사용 방법
본문 목표 영상처리에서 가장 중요한 것은 정확성과 처리속도라고 할 수 있다. 정확성을 높이기 위해서는 관찰하려는 대상에 초점이 맞춰져 있어야한다. 원하는 피사체(대상)를 따로 분리하여 영상처리를 하고 싶은 경우 사용하는 방법이 '관심영역 설정'이다. 영어로는 RoI(Region of Interest) 라고 부른다. 키워드 : rect, RoI 알아볼 함수 원형 - 관심영역 ( Roi ) Mat img = imread("Lenna.png", 1); Mat img_roi_1, img_roi_2; img_roi_1 = img(Rect(200, 200, 100, 100)); img_roi_2 = img(Rect(Point(300, 200),Point( 400, 300))); src( Rect( x, y, wid..
2020. 7. 21.
[C++ opencv] 이미지에 원 그리기, circle( )
본문 목표 이미지를 처리함에 있어서 사용자가 확인할 수 있어야 쉽게 코드를 개발할 수 있다. 원을 표현해야하는 경우 어떻게 원을 이미지에 그려넣을 수 있는지 알아보자. 키워드 : circle( ) 알아볼 함수 원형 - 원 그리기 ( circle ) Mat img = imread("lane.png", 1); Mat img_circle; img.copyTo(img_circle); circle(img_circle, Point(500, 100), 50, Scalar(255, 0, 255), 1, 8, 0); circle(img_circle, Point(100, 100), 100, Scalar(255,0,0), 1, 4, 0); circle(img_circle, Point(200, 300), 70, Scalar:..
2020. 7. 21.
[C++ opencv] 이미지에 사각형 그리기, rectangle( )
본문 목표 이미지를 처리함에 있어서 사용자가 확인할 수 있어야 쉽게 코드를 개발할 수 있다. 사각형을 표현해야하는 경우 어떻게 사각형을 이미지에 그려넣을 수 있는지 알아보자. 키워드 : rectangle( ) 알아볼 함수 원형 - 사각형 그리기 ( rectangle ) Mat img = imread("lane.png", 1); Mat img_rectangle; img.copyTo(img_rectangle); rectangle(img_rectangle, Rect(Point(200, 200), Point(300, 300)), Scalar(0, 0, 255), 1, 8, 0); rectangle(img_rectangle, Rect(400, 400, 100, 100), Scalar(0, 0, 255), 1, 8..
2020. 7. 21.
[C++ opencv] 이미지에 선, 직선 그리기
본문 목표 이미지를 처리함에 있어서 사용자가 확인할 수 있어야 쉽게 코드를 개발할 수 있다. 직선을 표현해야하는 경우 어떻게 직선을 이미지에 그려넣을 수 있는지 알아보자. 키워드 : line() 알아볼 함수 원형 - 함수 기능 ( Function Name ) Mat img = imread("lane.png", 0); Mat img_line; img.copyTo(img_line); line(img_line, Point(200, 200), Point(200, 300), Scalar::all(255), 1, 8, 0); line(img_line, Point(200, 200), Point(200, 100), Scalar(105,200,100), 1, 8, 0); line( Input Output Array, p..
2020. 7. 21.
[C++ opencv] High pass filter (HPF)로 윤곽선 검출, edge detection
본문 목표 저번 포스터에서 Low pass filter를 다뤘고, 영상에서 노이즈 제거를 함을 알아봤다. 이번에는 비슷한 개념이면서 다른 High pass filter를 이해해보고, 어느 상황에서 사용하는지 알아보자. 키워드 : high pass filter, HPF, 고주파 통과 필터, 라플라시안, 라플라시안-가우시안, sobel 알아볼 함수 원형 - 고역주파수 통과 필터 ( High pass filter ) GaussianBlur(img, img_gaussian, Size(3, 3), 0, 0, 4); Sobel(img_gaussian, img_sobel_x, CV_8U, 1, 0, 3, (1.0), (0, 0), 4); Sobel(img_gaussian, img_sobel_y, CV_8U, 0, 1..
2020. 7. 15.
[C++ opencv] low pass filters (LPF)로 노이즈 제거하기
본문 목표 영상처리에서 노이즈제거는 매우 중요하다. 앞선 포스트에서 평균필터(average filter)와 가우시안 블러(gaussian blur)를 다뤘었다. 이번에는 보다 전문적으로 노이즈 제거 방법에 대해서 알아보도록 한다. 그리고 영상처리에 있어서 low pass filter는 노이즈 제거라는 것을 이해한다. 키워드 : low pass filter, average filter, gaussian filter, median filter, bilateral filter 알아볼 함수 원형 - 필터 적용 ( filter2d ) blur(img, img_blur, Size(5, 5), Point(-1, -1), BORDER_REFLECT); GaussianBlur(img, img_gaussian, Size(..
2020. 7. 15.
C언어 기초 - 헤더파일 만드는 방법과 사용하는 방법
본문 목표 프로젝트가 복잡하고 규모가 클 수록, 코드가 많이 길어지게 된다. 코드가 길어지면 가독성이 떨어지게 된다. 가독성이 떨어지면, 코드 개발이 복잡해지고, 오류가 발생할 확률이 높고, 오류를 잡기 힘들어진다. 따라서 가독성을 높이기 위해서는 여러개의 소스파일을 사용한다. 여러개 소스파일을 만들고, 사용하는 방법을 헤더파일을 통해 알아보자. 개념 정리 학창시절 공부를 한다고 했을 때, 단원별로 공부를 하고, 개념노트를 만들곤 했을 것이다. 프로그래밍도 마찬가지로, 계속 개발할 수록 비슷한 것들 끼리 묶어서 저장하는 것이 좋다. 나중에 찾아보기도 쉽고 이해하기도 쉽기 때문이다. 노트 하나에 수학, 물리, 화학을 한꺼번에 정리하면 완전 뒤죽박죽이 되어서 알 수 없듯이 프로그래밍도 소스파일 하나에 개발을..
2020. 7. 8.
C언어 기초 - 조건문 if , else if, else 이해하기
본문 목표 조건문은 주어진 조건이 참일 경우 해당 코드를 실행하는 명령이다. 주어진 조건에 따라서 경우의 수를 여러개로 나눌 수 있는데, if, else if, else 가 그렇다. if 를 여러개 사용해도 되지만, 그러면 안 되는 이유는 실행 속도에서 손해를 보기 때문이다. if 는 무조건 조건 검사를 하는데, 이미 해결된 사안이고, 뒤에 있는 거짓이라 필요 없음에도 다 한번씩 두드려보기에 코드 작동 속도에 저하가 생기게 된다. 따라서 올바른 조건문을 사용할 줄 알아야 한다. 개념 정리 if, else if, else 의 사용 방법은 아래와 같다. if ( 조건1 ) { 조건 1이 참이면 실행 } else if ( 조건2 ) { 조건 1이 거짓이고, 조건 2가 참이면 실행 } else if ( 조건3 ..
2020. 7. 5.