enum class FilterType
{
FILTER_GAUSS = 0,
FILTER_MEDIAN,
FILTER_BLUR,
FILTER_INVERT,
FILTER_EDGE,
};
/*
说明:通过选择滤波类型确定图像滤波,注意不同的滤波类型对应的参数个数
输入imgInput:输入图;
输入type:滤波类型;
输入...:变参;
输出imgOutput:输出图;
返回:函数执行是否支持;
*/
bool ImageFilter(Mat imgInput, Mat& imgOutput, FilterType type, ...)
{
try
{
va_list arguments;
switch (type)
{
case FilterType::FILTER_GAUSS:
{
va_start(arguments, 3);
int nType = va_arg(arguments, int);
int nKernalW= va_arg(arguments, int);
int nKernalH= va_arg(arguments, int);
GaussianBlur(imgInput, imgOutput, Size(nKernalW, nKernalH), 0.0, 0.0);
va_end(arguments);
break;
}
case FilterType::FILTER_MEDIAN:
{
va_start(arguments, 2);
int nType = va_arg(arguments, int);
int nKernal= va_arg(arguments, int);
medianBlur(imgInput, imgOutput, nKernal);
va_end(arguments);
break;
}
case FilterType::FILTER_BLUR:
{
va_start(arguments, 3);
int nType = va_arg(arguments, int);
int nKernalW= va_arg(arguments, int);
int nKernalH= va_arg(arguments, int);
blur(imgInput, imgOutput, Size(nKernalW, nKernalH));
va_end(arguments);
break;
}
case FilterType::FILTER_INVERT:
{
bitwise_not(imgInput, imgOutput);
break;
}
case FilterType::FILTER_EDGE:
{
va_start(arguments, 3);
int nType = va_arg(arguments, int);
int nThreshold1= va_arg(arguments, int);
int nThreshold2= va_arg(arguments, int);
Canny(imgInput, imgOutput, Size(nThreshold1, nThreshold2));
va_end(arguments);
break;
}
}
catch (...)
{
return false;
}
}
11-18
4931
06-24
1693
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交