티스토리 뷰

1강

opencv설치

리눅스에 ros를 설치하면서 이미 설치가 되어있다.

따로 설치할 필요 없음.

 

2021/01/18 - [OpenCV] - OpenCV - 이미지 불러오기

 

OpenCV - 이미지 불러오기

1. 이미지 불러오기 예제 이미지 불러오는 함수 Mat img = imread("foo.png", IMREAD_COLOR); 컬러로 읽고 싶으면 IMREAD_COLOR 또는 1 흑백으로 읽고 싶으면 IMREAD_GRAYSCALE 또는 0 이미지 저장하는 함수 imwri..

donie.tistory.com


2강

2021/01/18 - [OpenCV] - OpenCV - Mat 메모리 공유 vs 복사

 

OpenCV - Mat 메모리 공유 vs 복사

1. Mat 기본 예제 Mat함수 Scalar( B, G, R ) 이다. 코드 ex1.cpp #include #include using namespace std; using namespace cv; int main() { Mat M0(100, 200, CV_8UC1, Scalar(50)); Mat M1(100, 200, CV_..

donie.tistory.com


3강

cvtColor함수 : color space 변경할 때

split(), merge()함수 : MAT의 채널 분리 및 병합.

 

ROI

Region Of Interest, 관심영역

기존 Matrix의 일부로 Sub Matrix

Mat M(Mat, Rect);

 

노이즈 제거 = filtering = smoothing

주변의 값들과 비슷하게.

mean filter : 평균값

Gaussian 필터

salt & pepper noise : median 필터 이용.


4강

threshold()함수

이진화 : threshold를 기준으로 작은 값은 검은색으로, 큰 값은 흰색으로

보통 검은색은 관심 X. 흰색이 관심 영역.

전역적 문턱치 : 영상 전체에서 하나의 threshold값 적용.

가변적 문턱치 : 영상 내 각 영역에 따라 threshold값 다르게 적용.

ex.

threshold(img, dst, 0, 255, THRESH_OTSU);

 

inRange()함수

2개의 threshold를 적용하는 경우.

 

모폴로지 연산

morphologyEx(src, dst, operation, element);

1) 침식

erode()함수.

또는 위 함수에서 operation = MORPH_ERODE = 0을 입력해도 됨.

주변 픽셀 중 검은색 픽셀이 하나라도 있으면 검게 만들어라.

-> 흰 영역이 침식함.

작은 물체를 없애는 노이즈 제거 효과.

원래 떨어져있는 물체인데 약간 겹쳐있는 경우, 서로 떼어낼 수 있음.

 

2) 팽창

dilate()함수.

또는 위 함수에서 operation = MORPH_DILATE = 1을 입력해도 됨.

주변 픽셀 중 하얀색 픽셀이 하나라도 있으면 흰색으로 만들어라.

-> 흰 영역이 팽창함.

 

3) 열림 Opening

위 함수에서 operation = MORPH_OPEN = 2을 입력.

침식 -> 팽창

white dots 노이즈를 제거하는 데 좋다.

 

4) 닫힘 Closing

위 함수에서 operation = MORPH_CLOSE = 3을 입력.

팽창 -> 침식

black dots 노이즈를 제거하는 데 좋다.


5강

경계 검출

edge : 영상 함수의 밝기가 급격하게 변하는 픽셀.

 

Sobel 필터

1 0 -1
2 0 -2
1 0 -1
1 2 1
0 0 0
-1 -2 -1

 

CANNY Edge Detector

Canny(input, output, threshold1, threshold2, ksize, [L2flag]);

에지를 구하고 -> thresholding -> 이진 영상 출력

1. Non-Maximum Suppression

 

2. Double Threshold

강한 edge, 약한 edge, not edge로 분류.

2021/01/19 - [OpenCV] - OpenCV - Canny Edge 함수(C++)

 

OpenCV - Canny Edge 함수(C++)

1. 소스코드 #include #include using namespace std; using namespace cv; static Mat input_img, edge_img; static char *win_name = "Canny"; static int lowTh, highTh; void CannyThr(int, void*){ Canny(inp..

donie.tistory.com

 

Hough Line 변환

에지 정보를 연결하여 직선을 검출.

x,y평면에서 -> 로우 ρ , 세타 θ 평면으로 변환

1. grayscale 영상으로 변환

2. edge영상 추출

3. ρθ평면에서구획지정

4. 에지를 이루는 점들에 대해서 각각 ρ, θ를 계산하여 각 구획에 vote

5. threshold값 이상의 vote를 받은 구간에서의 ρ, θ값을 직선으로 간주

HoughLinesP(input, output, rho, theta, threshold, minLineLength=0, maxLineGap=0);

6강

Contour 윤곽선 검출

점을 모아서 다각형 윤곽선 정보로 변환하는 함수.

함수 수행 후 입력 img에 변형이 일어나기 때문에 복사본을 사용해야 한다.

findContours(image, contours, hierarchy, mode, method, offset);

 

찾은 윤곽선을 그려주는 함수.

drawContours(image, contours, contourIdx, color, thickness, hierarchy, maxLevel, offset);

 

윤곽선을 다각형으로 근사화하는 함수.

approxPolyDP(curve, approxCurve, epsilon, closed);

 

차선검출 알고리즘

1. ROI 설정

2. 노이즈 제거

3. 컬러공간 변환 (노란색 차선 찾는 경우 HSV공간으로 변환해야. 흰색차선은 grayscale로 변환.)

4. 이진화

5. edge 검출

6. 직선 검출

7. 차선 판정

8. 차선 그리기


7강

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함