许多基本的视觉任务涉及将滤波器应用于视频领流。
我们将修改程序,在播放视频的每一帧时,我们都对其进行简单的操作。
一个特别简单的操作时平滑图像,该图像通过高斯或其他类似的核函数进行卷积来有效地减少图像的信息内容。
#include <opencv2/opencv.hpp>
int main(int argc, char ** argv)
{
// 创建一些窗口来显示输入和输出图像
cv::namedWindow("Example2-5-in", cv::WINDOW_AUTOSIZE);
cv::namedWindow("Example2-5-out", cv::WINDOW_AUTOSIZE);
cv::Mat image = cv::imread(argv[1]);
// 创建一个窗口显示输入图像
cv::imshow("Example2-5-in", image);
// 创建一个图像保存平滑后的输出
cv::Mat out;
// 平滑
// 可以使用GaussianBlur(),blur(),medianBlur()或bilateralFilter()
// 5x5高斯卷积滤波器,高斯内核的大小应该始终是奇数,因为高斯内核在图像中心像素处计算
cv::GaussianBlur(image, out, cv::Size(5, 5), 3, 3);
cv::GaussianBlur(out, out, cv::Size(5, 5), 3, 3);
// 在输出窗口显示平滑后的图像
cv::imshow("Example2-5-out", out);
// 等待用户按下一个按键,窗口会自我销毁
cv::waitKey(0);
// cv::destroyWindow("Example2-5-in");
// cv::destroyWindow("Example2-6-out");
return 0;
}