OpenCv2.2 C ++ filter2D

时间:2014-02-22 18:04:32

标签: c++ matlab opencv

我正在使用OpenCv2.2将matlab代码转换为c ++,在一个与matlab类似的函数(conv2)中,我使用了来自

的filter2D
#include <opencv2/imgproc/imgproc.hpp>

问题是我收到的错误消息:

  

OpenCV错误:未实现功能/功能(源格式(= 4)和目标格式(= 4)的不支持组合)   在getLinearFilter中,文件C:\ opencv \ sources \ modules \ imgproc \ src \ filter.cpp,第3234行

     

在抛出'cv :: Exception'

的实例后终止调用      

what():C:\ opencv \ sources \ modules \ imgproc \ src \ filter.cpp:3234:错误:( - 213)源格式(= 4)和目标格式(= 4)的不支持组合   在函数getLinearFilter

这是我第一次看到像这样的错误。所以,我不知道这是来自我的安装还是来自代码。

=============================================== ============================================= 附件:

代码:

void conv2(const Mat &img, const Mat& kernel, ConvolutionType type, Mat& dest)
{
    // fonction trouvée sur le site :
    // http://blog.timmlinder.com/2011/07/opencv-equivalent-to-matlabs-conv2-function/
    // par  Timm Linder le 05/07/2011
  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);

  //cvFilter2D(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);
  }
}

在此博客上发现: http://blog.timmlinder.com/2011/07/opencv-equivalent-to-matlabs-conv2-function/ (如果某人有理想再现可能引人注目的转化)

1 个答案:

答案 0 :(得分:3)

查看filter2d docs, - 很明显你不能使用int32 Mats(type()== 4)。

你必须转换为CV_8U,CV_16U,CV_32F,CV_64F之一

(也考虑更新你的opencv.2.2已经很老了)