我想借助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
答案 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);