샘플 이미지 (영상)
Banner vector created by freepik - www.freepik.com
기본 영상처리 함수 (1)
N 채널 영상에 대해 기본적인 연산을 제공한다.
대칭
전치
반복
대칭
def )
/** * src를 axis방향으로 대칭시켜 dest에 붙여넣는다. * * @param src 대칭시킬 행렬. * @param dest 결과가 저장될 행렬. * @param axis 축을 정의하는 상수. * 0 : x축 대칭 * 1 : y축 대칭 * -1 : xy축 대칭 */ void fiip(InputArray src, OutputArray dest, int axis);
example 1)
1채널 영상을 대칭.
//! 테스트 행렬. Mat mat = Mat(Size(5, 5), CV_32SC1); for(int y=0; y<mat.rows; y++){ for(int x=0; x<mat.cols; x++){ mat.at<int>(y, x) = y*mat.cols + x; } } /* * [ 0, 1, 2, 3, 4; * 5, 6, 7, 8, 9; * 10, 11, 12, 13, 14; * 15, 16, 17, 18, 19; * 20, 21, 22, 23, 24] */ //! xy축에 대해 대칭. flip(mat, mat, -1); /* * [24, 23, 22, 21, 20; * 19, 18, 17, 16, 15; * 14, 13, 12, 11, 10; * 9, 8, 7, 6, 5; * 4, 3, 2, 1, 0] */
example 2)
3채널 영상을 대칭.
Mat image = imread("./images/image.jpg", IMREAD_UNCHANGED); flip(image, image, 1); imshow("canvas", image); waitKey();
전치
전치란 (a, b)의 위치를 (b, a)로 옮기는 것을 말한다.
2번 전치하면 원래 영상으로 돌아온다.
전치는 회전이 아님에 주의하자.
def )
/** * src의 전치행렬을 dest로 복사한다. * * @param src 전치할 행렬 * @param dest 결과가 저장될 행렬 */ void transpose(InputArray src, OutputArray dest);
example 1)
1채널 영상을 전치
//! 테스트 행렬. Mat mat = Mat(Size(5, 3), CV_32SC1); for(int y=0; y<mat.rows; y++) { for (int x = 0; x < mat.cols; x++) { mat.at<int>(y, x) = y * mat.cols + x; } } /* * [ 0, 1, 2, 3, 4; * 5, 6, 7, 8, 9; * 10, 11, 12, 13, 14] */ //! 전치 transpose(mat, mat); /* * [0, 5, 10; * 1, 6, 11; * 2, 7, 12; * 3, 8, 13; * 4, 9, 14] */
반복
def )
/** * src를 반복 복사한다. * * @param src 반복할 행렬. * @param ny y방향 반복 횟수. * @param nx x방향 반복 횟수. * @return 반복 복사된 행렬. */ Mat repeat(InputArray src, int ny, int nx);
example 1)
1채널 영상을 반복.
//! 테스트 행렬. Mat mat = Mat(Size(3, 1), CV_32SC1); for(int y=0; y<mat.rows; y++) { for (int x = 0; x < mat.cols; x++) { mat.at<int>(y, x) = y * mat.cols + x; } } /* * [0, 1, 2] */ //! 반복 복사. Mat repeated = repeat(mat, 3, 2); /* * [0, 1, 2, 0, 1, 2; * 0, 1, 2, 0, 1, 2; * 0, 1, 2, 0, 1, 2] */
example 2)
3채널 영상을 반복
//! 이미지 로드. Mat image = imread("./images/image.jpg", IMREAD_UNCHANGED); Mat repeated = repeat(image, 2, 1); imshow("canvas", repeated); waitKey();
'# 미사용 > OpenCV' 카테고리의 다른 글
[OpenCV] 행렬의 산술연산 (0) | 2019.10.31 |
---|---|
[OpenCV] 채널의 분리, 병합, 혼합 (0) | 2019.10.31 |
[OpenCV] 기본도형 그리기 (0) | 2019.10.29 |
[OpenCV] 윈도우 및 이벤트 관리 (0) | 2019.10.29 |
[OpenCV] 이미지 입출력 (0) | 2019.10.29 |