matlab-opencv中有和matlab中conv2一样功能的函数吗?

WP主题Bug提交 WP主题Bug提交 主题:1067 回复:2226

matlab-opencv中有和matlab中conv2一样功能的函数吗?

甜柠檬 发布于 2017-01-17 字数 675 浏览 1171 回复 3

我正在把一份matlab图像处理的代码翻译成C++代码,用的是opencv的库,现在有一个问题,matlab中的conv2函数在opencv中有没有对应的函数呢?我用的是cvFilter2D,不过结果貌似不对,下面是两个函数分别做卷积的结果:

opencv C++ 代码:

CvMat * Aa = cvCreateMat(2, 2, CV_32FC1);
CvMat * Bb = cvCreateMat(2, 2, CV_32FC1);
CvMat * Cc = cvCreateMat(2, 2, CV_32FC1);
cvSetReal2D(Aa, 0, 0, 1);
cvSetReal2D(Aa, 0, 1, 2);
cvSetReal2D(Aa, 1, 0, 3);
cvSetReal2D(Aa, 1, 1, 4);
cvSetReal2D(Bb, 0, 0, 5);
cvSetReal2D(Bb, 0, 1, 5);
cvSetReal2D(Bb, 1, 0, 5);
cvSetReal2D(Bb, 1, 1, 5);
cvFilter2D(Aa, Cc, Bb);

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

泛泛之交 2017-08-20 3 楼

你好,我在matlab里面用的imfilter(I,h,'conv')据说它和conv2(I,h,'same')结果是一样的,我也需要把一份matlab图像处理的代码翻译成C++代码,最好是用opencv的库,你编的代码试验过了吗?可行吗?不是说conv2有翻转过程吗?

偏爱自由 2017-07-17 2 楼

这个问题解决了吗?我遇到这样的问题 求解

浮生未歇 2017-05-30 1 楼

我自己写的答案如下:

 IplImage cvImgConv2(IplImage src,CvMat kernel,ConvolutionType type)
{
IplImage
source;
IplImage* destinate;

if(CONVOLUTION_FULL == type) 
{
    const int additionalRows = kernel->rows-1;
    const int additionalCols = kernel->cols-1;

    source = cvCreateImage(cvSize(additionalCols+src->width,additionalRows+src->height),src->depth,src->nChannels);

    cvCopyMakeBorder(src,source,cvPoint((additionalCols+1)/2,(additionalRows+1)/2),IPL_BORDER_CONSTANT);
}
else
{
    source=cvCloneImage(src);
}

destinate=cvCloneImage(source);

/*CvMat* FlipKernel=cvCloneMat(kernel);
cvFlip(kernel,FlipKernel,-1);*/不知道该不该flip,暂时先不flip

cvFilter2D(source,destinate,kernel);

cvReleaseImage(&source);
//cvReleaseMat(&FlipKernel);

if(CONVOLUTION_VALID == type) 
{
    IplImage* dst=cvCreateImage(cvSize(src->width-kernel->width+1,src->height-kernel->height+1),src->depth,src->nChannels);

    CvRect roi=cvRect(kernel->height/2,kernel->width/2,src->width-kernel->width+1,src->height-kernel->height+1);

    dst=cvGetSubImage(destinate,roi);

    cvReleaseImage(&destinate);

    return dst;
}
else
{
    return destinate;
}

}