2014-09-30 16 views
1

我目前运行filter2D进行卷积内核与图像:是否可以在图像中的某一点运行filter2D(卷积)?

cv::filter2D(source, 
      dest, 
      CV_64F, 
      kernal, 
      cv::Point(-1,-1), 
      0, 
      cv::BORDER_CONSTANT); 

但是,我没有兴趣与内核卷积的整体形象,我只是想在对给定像素运行卷积源图像。

这可能吗?

+0

刚刚看到一张纸条从中表明,这将只是通过裁剪工作的文件1px ROI - >注意当源图像是较大图像的一部分(ROI)时,该函数将尝试使用ROI之外的像素来形成边框。要禁用此功能并始终进行外插,就好像src不是ROI一样,请使用borderType | BORDER_ISOLATED。 http://docs.opencv.org/modules/imgproc/doc/filtering.html – Robert 2014-09-30 21:31:44

+1

这听起来很合理,尽管你也可以手动做一些类似'filterVal = subM.mul(kernel).sum;'的地方''' subM'是ROI。 – beaker 2014-09-30 21:37:13

+0

@beaker - 很酷,谢谢 - 我不知道你能做到这一点。使用该方法的像素边界会发生什么情况? – Robert 2014-09-30 22:02:37

回答

2

答案很简单,从文档enter link description here

注意当源图像是一个更大的图像的一部分(ROI),该函数将尝试使用像素外的ROI,以形成边框

因此,解决办法是:

cv::Point point(x, y); 
Mat onePixelSourceROI(source, cv::Rect(point, cv::Size(1, 1))); 

cv::filter2D(onePixelSourceROI, 
      dest, 
      CV_64F, 
      kernal, 
      cv::Point(-1,-1), 
      0, 
      cv::BORDER_CONSTANT);