函数 cvSmooth 可使用简单模糊、简单无缩放变换的模糊、中值模糊、高斯模糊、双边滤波的任何一种方法平滑图像。每一种方法都有自己的特点以及局限。 没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvLaplace相似)和32位浮点数到32位浮点数的变换格式。 简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特 浮点图像。这两种方法可以(in-place)方式处理图像。 中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像。
js
program cv_Smooth;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
ocv.highgui_c,
ocv.core_c,
ocv.core.types_c,
ocv.imgproc_c,
ocv.imgproc.types_c,
uResourcePaths;
const
// 桁 赅痱桧觇
filename = cResourceMedia + 'cat2.jpg';
var
image: PIplImage = nil;
dst: PIplImage = nil;
begin
try
// 从文件加载图像并将其分配给变量 `image`
image := cvLoadImage(filename, 1);
// 克隆图像,将其分配给变量 `dst`
dst := cvCloneImage(image);
// 打印图像文件名
Writeln('[i] image: ', filename);
// 如果图像未被成功加载,终止程序
if not Assigned(image) then
Halt;
// 创建并显示名为 'original' 的窗口,用于显示原始图像
cvNamedWindow('original', CV_WINDOW_AUTOSIZE);
// 创建并显示名为 'Smooth' 的窗口,用于显示经过平滑处理后的图像
cvNamedWindow('Smooth', CV_WINDOW_AUTOSIZE);
// 对原始图像进行高斯平滑处理,结果存储在 `dst` 中
cvSmooth(image, dst, CV_GAUSSIAN, 3, 3);
// cvSmooth(image, dst, CV_BLUR_NO_SCALE, 3, 3);
cvShowImage('original', image);
cvShowImage('Smooth', dst);
cvWaitKey(0);
cvReleaseImage(image);
cvReleaseImage(dst);
cvDestroyWindow('original');
cvDestroyWindow('Smooth');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.