我正在进行图像处理,需要在c ++ OpenCV中知道相当于matlab的conv2.
我找到了这个链接,但它不符合我的要求.
我面临的问题是我需要用2-D双数组卷积Mat图像,这不是上面链接中给出的情况.
matlab代码是:
img = conv2(img1,Mx,'same')
Run Code Online (Sandbox Code Playgroud)
哪里
Mx = {
{0, 0, 0, 0, 0, 0} ,
{0, -0.0003, -0.0035, 0, 0.0035, 0.0003} ,
{0, -0.0090, -0.0903, 0, 0.0903, 0.0090} ,
{0, -0.0229, -0.2292, 0, 0.2292, 0.0229} ,
{0, -0.0090, -0.0903, 0, 0.0903, 0.0090} ,
{0, -0.0003, -0.0035, 0, 0.0035, 0.0003}
};
Run Code Online (Sandbox Code Playgroud)
谢谢.
解
使用OpenCV的filter2D功能.
代码示例
//initializes matrix
cv::Mat mat = cv::Mat::ones(50, 50, CV_32F);
//initializes kernel
float Mx[36] = { 0, 0, 0, 0, 0, 0 ,
0, -0.0003, -0.0035, 0, 0.0035, 0.0003 ,
0, -0.0090, -0.0903, 0, 0.0903, 0.0090 ,
0, -0.0229, -0.2292, 0, 0.2292, 0.0229 ,
0, -0.0090, -0.0903, 0, 0.0903, 0.0090 ,
0, -0.0003, -0.0035, 0, 0.0035, 0.0003
};
cv::Mat kernel(6, 6, CV_32F, Mx);
//convolove
cv::Mat dst;
cv::filter2D(mat, dst, mat.depth(), kernel);
Run Code Online (Sandbox Code Playgroud)