openCV cvPyrDown cvPyrUp Canny 图像缩放,边缘检测

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013420428/article/details/82757132
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/imgcodecs.hpp"
using namespace std;
using namespace cv;

// filter 卷积滤波器类型,目前仅支持CV_GAUSSIAN_5x5。
// 原图缩小2倍
IplImage* doPyrDown (IplImage* in, int filter = CV_GAUSSIAN_5x5)
{
    //assert(in->width%2 == 0 && in->height%2 == 0);

    IplImage* out = cvCreateImage(cvSize(in->width/2, in->height/2), in->depth, in->nChannels);

    cvPyrDown(in, out, filter);

    return (out);
}

// 原图放大2倍
IplImage* doPyrUp(IplImage* in, int filter = CV_GAUSSIAN_5x5)
{
    IplImage* out = cvCreateImage(cvSize(in->width*2, in->height * 2), in->depth, in->nChannels);

    cvPyrUp(in, out, filter);
    
    return (out);
}

// Canny 算子,边缘检测
IplImage* doCanny(IplImage* in, double lowThresh, double hightThresh, double aperture)
{
    if (in->nChannels != 1)
    {
        //return 0; //Canny only handles gray scale images
    }

    IplImage* out = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1);

    cvCanny(in, out, lowThresh, hightThresh, aperture);

    return out;
}

int main(int argc, char **argv)
{
    IplImage* src = cvLoadImage(argv[1]);
    IplImage* img_down = doPyrDown(src);
    IplImage* img_up = doPyrUp(src);
    IplImage* img_canny = doCanny(src, 10, 100, 3);
    
    cvNamedWindow("src", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("down", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("up", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("canny", CV_WINDOW_AUTOSIZE);

    cvShowImage("src", src);
    cvShowImage("down", img_down);
    cvShowImage("up", img_up);
    cvShowImage("canny", img_canny);

    cvWaitKey(0);

    cvReleaseImage(&src);
    cvReleaseImage(&img_down);
    cvReleaseImage(&img_up);
    cvReleaseImage(&img_canny);

    //cvDestroyWindow("src");
    //cvDestroyWindow("down");
    //cvDestroyWindow("up");
    
    cvDestroyAllWindows();

    return 0;
}

cmake_minimum_required(VERSION 2.8)

project(prydown)

find_package(OpenCV REQUIRED)

add_executable(pyrdown main.cpp)

target_link_libraries(pyrdown ${OpenCV_LIBS})

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013420428/article/details/82757132
今日推荐