请用c语言在VS2022环境下写一个通用图像卷积程序,并用一张灰度图像测试图像平滑和锐化增强的结果。 1)读入图像并显示结果。 2)平滑算子采用: 1/10 1/10 1/10 1/10 2/10 1/10 1/10 1/10 1/10 3)锐化算子采用: 0 -1 0 -1 5 -1 0 -1 0
时间: 2023-11-18 14:04:17 浏览: 78
下面是一个基于C语言和OpenCV库的通用图像卷积程序,可以实现图像平滑和锐化增强。程序中使用了cv2DConv函数实现卷积操作。
```c
#include <stdio.h>
#include <stdlib.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读入图像
Mat image = imread("test.jpg", IMREAD_GRAYSCALE);
if (image.empty())
{
printf("Failed to read image!\n");
return -1;
}
// 显示原图像
namedWindow("Original Image", WINDOW_NORMAL);
imshow("Original Image", image);
// 定义平滑算子和锐化算子
float smooth_kernel_data[3][3] = { {1.0 / 10, 1.0 / 10, 1.0 / 10},
{1.0 / 10, 2.0 / 10, 1.0 / 10},
{1.0 / 10, 1.0 / 10, 1.0 / 10} };
float sharpen_kernel_data[3][3] = { {0, -1, 0},
{-1, 5, -1},
{0, -1, 0} };
Mat smooth_kernel = Mat(3, 3, CV_32FC1, smooth_kernel_data);
Mat sharpen_kernel = Mat(3, 3, CV_32FC1, sharpen_kernel_data);
// 图像卷积操作
Mat smooth_result, sharpen_result;
filter2D(image, smooth_result, -1, smooth_kernel);
filter2D(image, sharpen_result, -1, sharpen_kernel);
// 显示平滑和锐化结果
namedWindow("Smooth Result", WINDOW_NORMAL);
imshow("Smooth Result", smooth_result);
namedWindow("Sharpen Result", WINDOW_NORMAL);
imshow("Sharpen Result", sharpen_result);
waitKey(0);
return 0;
}
```
在程序中,我们首先读入一张灰度图像,然后定义了平滑算子和锐化算子,并使用filter2D函数对图像进行卷积操作,得到平滑和锐化增强的结果。最后使用namedWindow和imshow函数显示结果,为了方便观察,我们将所有窗口设置成了可调整大小的。
注意:这个程序需要先安装OpenCV库并链接到项目中才能正确编译运行。
阅读全文