#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int DELAY_CAPTION = 1500;
int DELAY_BLUR = 100;
int MAX_KERNEL_LENGTH = 31;
Mat src;
Mat dst;
char window_name[] = "Filter Methods";
// 显示使用的平滑方法标题
int displayCaption(char* caption) {
dst = Mat::zeros(src.size(), src.type());
putText(dst, caption,
Point(src.cols/4, src.rows/2),
CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255));
imshow(window_name, dst);
int c = waitKey(DELAY_CAPTION);
if (c >= 0) {
return -1;
}
return 0;
}
// 显示保持时间
int displayDst(int delay) {
imshow(window_name, dst);
int c = waitKey(DELAY_CAPTION);
if (c >= 0) {
return -1;
}
return 0;
}
int main(int argc, char* argv[]) {
const char* filename = "tiger.jpg";
src = imread(filename, CV_LOAD_IMAGE_COLOR);
namedWindow( window_name, CV_WINDOW_AUTOSIZE );
if (displayCaption("Orignal Image") != 0) {
return 0;
}
if (displayDst(DELAY_BLUR) != 0) {
return 0;
}
//使用均值平滑-----------------------------------------------------------------------
if (displayCaption("Homogeneous Blur") != 0) {
return 0;
}
for(int i = 1; i < MAX_KERNEL_LENGTH; i += 2) {
blur(src, dst, Size(i, i), Point(-1, -1));
if (displayDst(DELAY_BLUR) != 0) {
return 0;
}
}
// 使用高斯平滑-----------------------------------------------------------------------
if (displayCaption("Gaussian Blur") != 0) {
return 0;
}
for(int i = 1; i < MAX_KERNEL_LENGTH; i += 2) {
GaussianBlur(src, dst, Size(i, i), 0, 0);
if (displayDst(DELAY_BLUR) != 0) {
return 0;
}
}
// 使用中值平滑--------------------------------------------------------------------------
if (displayCaption("Median Blur") != 0) {
return 0;
}
for(int i = 0; i < MAX_KERNEL_LENGTH; i += 2) {
medianBlur(src, dst, i);
if (displayDst(DELAY_BLUR) != 0) {
return 0;
}
}
// 使用双边平滑---------------------------------------------------------------------------
if (displayCaption("Bilateral Blur") != 0) {
return 0;
}
for(int i = 0; i < MAX_KERNEL_LENGTH; i += 2) {
bilateralFilter(src, dst, i, i*2, i/2);
if (displayDst(DELAY_BLUR) != 0) {
return 0;
}
}
waitKey(0);
return 0;
}
Homogeneous_Gaussian_Median_Bilateral_blure
最新推荐文章于 2019-11-08 19:15:23 发布