2014년 10월 22일 수요일

영상 평행 이동

이미지를 평행이동(4방향으로 각각) 해야 할 경우가 있었는데, 당연히 있을 거라고 예상했던 평행 이동 함수가 OpenCV에서는 없었다.
너무 간단해서 아무도 만들지 않은건지.. OpenCV Document에서 내가 못찾는것인지.. mil 에서는 MimTranslate이라는 함수를 썻었는데..
아래처럼 직접 이동 시켜주었다.

[-] Collapse
bool Trans4way(Mat matSrc, int nStep, Mat& matLeft, Mat& matRight, Mat& matUp, Mat& matDown)
{
    int nWidth = matSrc.cols;
    int nHeight = matSrc.rows;

    matLeft = Mat::zeros(Size(nWidth,nHeight),CV_8UC1);
    matRight = Mat::zeros(Size(nWidth,nHeight),CV_8UC1);
    matUp = Mat::zeros(Size(nWidth,nHeight),CV_8UC1);
    matDown = Mat::zeros(Size(nWidth,nHeight),CV_8UC1);

    for(int y = 0;y<nHeight;y++)
    {
        for(int x = 0;x<nWidth;x++)
        {
            if(x-nStep>=0)
                matLeft.at<uchar>(Point(x-nStep,y)) = matSrc.at<uchar>(Point(x,y));
            if(x+nStep<nWidth)
                matRight.at<uchar>(Point(x+nStep,y)) = matSrc.at<uchar>(Point(x,y));
            if(y-nStep>=0)
                matUp.at<uchar>(Point(x,y-nStep)) = matSrc.at<uchar>(Point(x,y));
            if(y+nStep<nHeight)
                matDown.at<uchar>(Point(x,y+nStep)) = matSrc.at<uchar>(Point(x,y));
        }
    }
    return true;
}

댓글 없음:

댓글 쓰기