版权声明:本文为博主原创文章,未经博主允许不得转载。 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})