OpenCV将我自己的滤镜应用于彩色图像

时间:2014-12-23 07:30:12

标签: c++ opencv

我正在使用OpenCV C ++过滤图像颜色。我想用我自己的矩阵过滤图像。看到这段代码:

img= "c:/Test/tes.jpg";
Mat im = imread(img);

然后我想用我的矩阵过滤/乘法(这个矩阵可以用另一个矩阵3x3替换)

Mat filter = (Mat_<double>(3, 3) <<17.8824, 43.5161, 4.11935, 
                                   3.45565, 27.1554, 3.86714, 
                                   0.0299566, 0.184309, 1.46709);

如何将img mat矩阵与我自己的矩阵相乘?我还是不明白如何将3通道(RGB)矩阵与另一个矩阵(单通道)相乘,并得到带有新颜色的图像。

1 个答案:

答案 0 :(得分:3)

你应该看一下opencv documentation。你可以使用这个功能:

filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT )

在你的代码中会给你这样的东西:

Mat output;
filter2D(im, output, -1, filter);

关于3通道矩阵的问题;它在文档中指定:

kernel – convolution kernel (or rather a correlation kernel), a single-channel floating point matrix; if you want to apply different kernels to different channels, split the image into separate color planes using split() and process them individually.

因此,默认情况下,您的“过滤器”矩阵将同等地应用于每个颜色平面。

编辑您在opencv网站上找到了一个功能齐全的示例:http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/filter_2d/filter_2d.html