dst.create( src.size(), CV_MAKETYPE(ddepth, src.channels()) );
anchor = normalizeAnchor(anchor, kernel.size());
- if( kernel.cols*kernel.rows >= dft_filter_size /*&&
- kernel.cols <= src.cols && kernel.rows <= src.rows*/ )
+ if( kernel.cols*kernel.rows >= dft_filter_size )
{
Mat temp;
if( src.data != dst.data )
- temp = src;
+ temp = dst;
else
- src.copyTo(temp);
- crossCorr( temp, kernel, dst, anchor, delta, borderType );
+ temp.create(dst.size(), dst.type());
+ crossCorr( src, kernel, temp, src.size(),
+ CV_MAKETYPE(ddepth, src.channels()),
+ anchor, delta, borderType );
+ if( temp.data != dst.data )
+ temp.copyTo(dst);
return;
}
void preprocess2DKernel( const Mat& kernel, vector<Point>& coords, vector<uchar>& coeffs );
void crossCorr( const Mat& src, const Mat& templ, Mat& dst,
+ Size corrsize, int ctype,
Point anchor=Point(0,0), double delta=0,
int borderType=BORDER_REFLECT_101 );
#undef CV_CALC_MAX
#define CV_CALC_MAX(a, b) if((a) < (b)) (a) = (b)
-void
-icvCrossCorr( const CvArr* _img, const CvArr* _templ,
- CvArr* _corr, CvPoint anchor=cvPoint(0,0),
- double delta=0, int borderType=IPL_BORDER_REPLICATE);
-
CvStatus CV_STDCALL
icvCopyReplicateBorder_8u( const uchar* src, int srcstep, CvSize srcroi,
uchar* dst, int dststep, CvSize dstroi,
if( dststep == 0 )
dststep = CV_STUB_STEP;
+ bordertype &= 15;
if( bordertype == IPL_BORDER_REPLICATE )
{
icvCopyReplicateBorder_8u( src->data.ptr, srcstep, srcsize,
using namespace cv; // all the new API is put into "cv" namespace. Export its content
+#if 0
+
// enable/disable use of mixed API in the code below.
#define DEMO_MIXED_API_USE 1
// all the memory will automatically be released by Vector<>, Mat and Ptr<> destructors.
}
+#else
+
+int main(int argc, char *argv[])
+{
+ Mat im(160, 160, CV_32F);
+ randu(im, Scalar(0.0), Scalar(1.0));
+ Mat dd = Mat::zeros(17,1,CV_32F);
+ Mat lp = Mat::zeros(17,1,CV_32F);
+ dd.at<float>(0) = 0.5;
+ dd.at<float>(16) = -0.5;
+ lp.at<float>(0) = 0.5;
+ lp.at<float>(16) = 0.5;
+ int p = 16;
+ Mat H = dd*lp.t();
+ Mat imcrop(im, Rect(17, 17, im.cols-2*p, im.rows-2*p));
+ Mat out1, out2;
+ filter2D(imcrop, out1, CV_32F, H, Point(-1,-1));
+ sepFilter2D(imcrop, out2, CV_32F, lp, dd, Point(-1,-1));
+ Mat temp;
+ out1.convertTo(temp, CV_16U, 65535.0, 32768.0);
+ imshow("filtered1.png", temp);
+ out2.convertTo(temp, CV_16U, 65535.0, 32768.0);
+ imshow("filtered2.png", temp);
+ waitKey();
+}
+
+#endif