使用c语言和openCV实现输入一张图片输出卷积过程参数和结果
时间: 2024-05-09 10:18:47 浏览: 88
基于opencv和c语言的图像处理程序
以下是一个简单的使用c语言和openCV实现输入一张图片输出卷积过程参数和结果的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
if ( argc != 2 )
{
printf("usage: %s <Image_Path>\n", argv[0]);
return -1;
}
Mat image;
image = imread( argv[1], 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
// 定义卷积核
float kernel_data[9] = {1, 0, -1, 2, 0, -2, 1, 0, -1};
Mat kernel(3, 3, CV_32FC1, kernel_data);
// 进行卷积运算
Mat result;
filter2D(image, result, -1, kernel, Point(-1,-1), 0, BORDER_DEFAULT);
// 输出卷积核和卷积结果
printf("Kernel:\n");
for (int i = 0; i < kernel.rows; i++) {
for (int j = 0; j < kernel.cols; j++) {
printf("%f ", kernel.at<float>(i,j));
}
printf("\n");
}
printf("\nResult:\n");
for (int i = 0; i < result.rows; i++) {
for (int j = 0; j < result.cols; j++) {
printf("%f ", result.at<float>(i,j));
}
printf("\n");
}
// 显示原始图像和卷积结果
namedWindow("Original Image", WINDOW_AUTOSIZE);
imshow("Original Image", image);
namedWindow("Convolution Result", WINDOW_AUTOSIZE);
imshow("Convolution Result", result);
waitKey(0);
return 0;
}
```
该程序需要传入一张图片的文件路径作为参数,然后定义一个卷积核,使用`filter2D`函数对图片进行卷积运算,输出卷积核和卷积结果,最后使用openCV的窗口功能显示原始图像和卷积结果。
阅读全文