基本上,你将你的 img 转换为 float,
然后构造一个内核:
cv::Mat kernel = cv::getGaborKernel(cv::Size(kernel_size,kernel_size), sig, th, lm, gm, ps);
并用filter2D应用它:
cv::filter2D(src_f, dest, CV_32F, kernel);
[edit]
** 我不确定,但您可能需要 1 通道图像作为输入。
** imshow 看到,您的图像是浮动的,并且只是饱和了超过 1.0 的任何内容,因此您会得到全白图像。
(这只是一个可视化问题,需要一些转换/缩放来解决它)
Mat in = imread("XfNal.jpg",0); // load grayscale
Mat dest;
Mat src_f;
in.convertTo(src_f,CV_32F);
int kernel_size = 31;
double sig = 1, th = 0, lm = 1.0, gm = 0.02, ps = 0;
cv::Mat kernel = cv::getGaborKernel(cv::Size(kernel_size,kernel_size), sig, th, lm, gm, ps);
cv::filter2D(src_f, dest, CV_32F, kernel);
cerr << dest(Rect(30,30,10,10)) << endl; // peek into the data
Mat viz;
dest.convertTo(viz,CV_8U,1.0/255.0); // move to proper[0..255] range to show it
imshow("k",kernel);
imshow("d",viz);
waitKey();