我正在使用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)矩阵与另一个矩阵(单通道)相乘,并得到带有新颜色的图像。
答案 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