OpenCVを使っ輪郭を書いてみる

輪郭とは~~。となりのピクセルの差が大きいところ。 でこうなる。

//画面をだすよ
void display(cv::Mat image) {
    //まえの記事をみてね
}

//
// ここから
//
int main(int argc, char** argv) {

    cv::Mat opencv = cv::imread("OpenCv.png",0);
    cv::Mat image  = cv::Mat::zeros(opencv.rows, opencv.cols, CV_8UC1);

     uchar up,down,left,right;
     uchar upleft,downleft;
     uchar upright,downright;
     uchar anchor;

     int cols = opencv.cols;
     int rows = opencv.rows;

     for (int j = 1; j < rows  - 1; j++) {
         for (int i = 1; i < cols  - 1; i++) {
             up = lena.at<uchar>(j - 1, i);
             down = lena.at<uchar>(j + 1, i);
             left = lena.at<uchar>(j, i - 1);
             right = lena.at<uchar>(j, i + 1);

             upleft = lena.at<uchar>(j - 1, i-1);
             upright = lena.at<uchar>(j - 1, i+1);
             downleft = lena.at<uchar>(j + 1, i-1);
             downright = lena.at<uchar>(j + 1, i+1);

             anchor = lena.at<uchar>(j, i);

             image.at<uchar>(j, i) =
                         cv::saturate_cast<uchar>(
                                 anchor*-4
                                 +up*1
                                 +down*1
                                 +left*1
                                 +right*1
                                 +upleft*0
                                 +upright*0
                                 +downleft*0
                                 +downright*0
                 );
         }
     }

    //画面に出して!!
    display(image);

}

オリジナル画像

f:id:treehitsuji:20150211150256p:plain

輪郭画像

f:id:treehitsuji:20150211150320p:plain