求matlab中的conv2卷积函数用c++如何实现

fengbingchun
博客专家认证
2010-09-14 02:18:21
matlab中C = conv2(H1, H2, A, 'same');
这条语句用c++如何实现呢?
求大侠们帮帮忙!!!
...全文
949 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeboy1015 2012-09-22
  • 打赏
  • 举报
回复
调用opencv函数:

enum ConvolutionType {
/* Return the full convolution, including border */
CONVOLUTION_FULL,

/* Return only the part that corresponds to the original image */
CONVOLUTION_SAME,

/* Return only the submatrix containing elements that were not influenced by the border
*/
CONVOLUTION_VALID
};

void conv2(const Mat &img, const Mat& kernel, ConvolutionType type, Mat& dest) {
Mat source = img;
if(CONVOLUTION_FULL == type) {
source = Mat();
const int additionalRows = kernel.rows-1, additionalCols = kernel.cols-1;
copyMakeBorder(img, source, (additionalRows+1)/2, additionalRows/2,
(additionalCols+1)/2, additionalCols/2, BORDER_CONSTANT, Scalar(0));
}

Point anchor(kernel.cols - kernel.cols/2 - 1, kernel.rows - kernel.rows/2 - 1);
int borderMode = BORDER_CONSTANT;
filter2D(source, dest, img.depth(), flip(kernel), anchor, 0, borderMode);

if(CONVOLUTION_VALID == type) {
dest = dest.colRange((kernel.cols-1)/2, dest.cols - kernel.cols/2)
.rowRange((kernel.rows-1)/2, dest.rows - kernel.rows/2);
}
}
dengzikun 2010-09-14
  • 打赏
  • 举报
回复
cvFilter2D好象不是做卷积的.
效率问题需要优化.可以参考INTEL IPP库,看是否有类似的实现.
也可考虑用GPU优化,参考nvida的CUDA.
fengbingchun 2010-09-14
  • 打赏
  • 举报
回复
我在网上看到过这个代码,如果图像太大,效率会很低,不知用opencv的cvFilter2D函数是否与用conv2得到的结果一致呢?
dengzikun 2010-09-14
  • 打赏
  • 举报
回复

19,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧