일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 딥러닝
- 데이터 과학
- Artificial Intelligence
- 주일설교
- MongoDB
- Big Data
- nodeJS
- 우리들교회
- Statistics
- 김양재 목사님
- WebGL
- R
- 인공지능
- 김양재 목사
- Deep learning
- Machine Learning
- 통계
- 빅 데이타
- node.js
- 김양재
- data science
- 몽고디비
- 빅 데이터
- openCV
- 빅데이터
- c++
- 확률
- probability
- 빅데이타
- No SQL
- Today
- Total
Scientific Computing & Data Science
[OpenCV] 2D Convolution / New Filter 본문
Concept
OpenCV의 filter2D는 Linear Filter를 생성하는 함수.
Prototype
Prototype은 다음과 같습니다:
void cv::filter2D (
InputArray src,
OutputArray dst,
int ddepth,
InputArray kernel,
Point anchor = Point(-1,-1),
double delta = 0,
int borderType = BORDER_DEFAULT
)
이 함수는 주어진 kernel을 이용하여 convolution을 하는데 이용됩니다. 사실 이 함수는 convolution을 하는 것이 아니라 correlation을 계산하는 것입니다:
\( \mathrm{dst}(x,y) = \displaystyle{ \sum_{ 0 \le x' \le \mathrm{kernal.cols}, 0 \le y' \mathrm{kernel.rows} }{ \mathrm{kernel}(x',y') * \mathrm{src}(s + x' - \mathrm{anchor}.x - y' - \mathrm{anchor}.y ) } } \)
Parameters의 설명은 다음 표와 같습니다:
src |
입력 이미지 |
dst |
src와 동일한 크기 및 동일한 채널의 출력 이미지 |
ddepth |
원하는 목표이미지의 깊이 |
kernel |
convolution kernel (또는 correlation kernel); 단일 채널 부동소수점 행렬 |
anchor |
kernel 내 필터된 포인트의 상대 위치를 나타내는 kernel의 앵커; 디폴트 값인 (-1,-1)은 앵커가 kernel의 중앙에 있음을 의미함 |
delta |
필터링 된 픽셀을 dst에 저장하기 전에 옵션값들을 이들 픽셀에 추가 |
borderType | 픽셀 외삽 |
Steps
1. 이미지를 불러옵니다.
2. 입력 행렬과 convolve할 kernel을 생성합니다.
3. Convolution을 적용합니다.
4. Contour를 그립니다.
Example Code
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 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include "opencv2/video/tracking.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/video/tracking.hpp" #include <Windows.h> #include "opencv2/imgproc/imgproc.hpp" #include <stdlib.h> #include <stdio.h> using namespace std; using namespace cv; /*///////////////////////////////////// @ function: conv2 *////////////////////////////////////// void conv2( cv::Mat src, int kernel_size ) { cv::Mat dst,kernel; kernel = cv::Mat::ones( kernel_size, kernel_size, CV_32F ) / (float)( kernel_size * kernel_size ); /// Apply filter cv::filter2D( src, dst, -1 , kernel, Point( -1, -1 ), 0, BORDER_DEFAULT ); cv::namedWindow( "filter2D Demo", CV_WINDOW_AUTOSIZE ); cv::imshow( "filter2D Demo", dst ); } /*///////////////////////////////////// @ function: main *////////////////////////////////////// int main() { cv::Mat src; /// Load an image src = cv::imread( {YOUR_IMAGE_PATH}, 1 ); if( !src.data ) { return -1; } conv2( src, 3 ); cv::waitKey( 0 ); return 0; } | cs |
Results
Original
Filtered
'Programming > OpenCV' 카테고리의 다른 글
[OpenCV] 이미지 윈도우 상에서 마우스 이벤트 감지하기 (0) | 2015.09.23 |
---|---|
[OpenCV] Bitwise Operation (0) | 2015.09.20 |
[OpenCV] Canny Edge Detector에 대한 CPU와 CUDA 비교 (0) | 2015.09.02 |
[OpenCV] cuda:: DeviceInfo() 함수를 이용한 CUDA Device 정보 출력하기 (0) | 2015.08.30 |
[Programming / OpenCV] Face Recognition(안면 인식) (2) | 2015.08.09 |