多通道内核的图像卷积

时间:2019-07-27 13:09:12

标签: c++ opencv image-processing convolution

我想借助C ++ OpenCV库进行三通道图像过滤。我想用3x3矩阵大小的内核来做,每个内核都有不同的值。为此,我首先将RGB图像分为三个通道:红色,绿色和蓝色。然后,我为这三个通道定义了不同的内核矩阵。然后,在In [171]: %timeit f4(10000000, 4) 163 ms ± 13.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) In [172]: %timeit f4(10000000, 8) 158 ms ± 5.58 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) In [173]: %timeit f4(10000000, 12) 157 ms ± 8.77 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) 函数的帮助下处理它们之后,代码引发了异常:

  

opencvTry.exe中0x00007FFAA150A388的未处理异常:Microsoft   C ++异常:内存位置0x0000002D4CAF9660处的cv :: Exception。   发生

我在下面的代码中无法执行此操作的原因是什么?

filter2d

1 个答案:

答案 0 :(得分:0)

您正在为cv::Mat使用构造函数,该构造函数需要一个指向数据的指针(例如int*),但是您将int**放入其中。我想这就是飞机坠毁的原因。

为什么不先创建cv::Mat,然后直接将数据写入其中?

请注意,OpenCV具有为您执行此操作的功能:

cv::Mat chans[3];
cv::split(src, chans);
//...
cv::filter2D(chans[2], chans[2], 0, kernelForBlue);