샘플 이미지 (영상)
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 |