函式原型
int getOptimalDFTSize(int vecsize);
引數說明
- int型別的vecsize,向量尺寸,一般是圖片的寬或高,
測驗代碼
#include<iostream>
#include<opencv2/opencv.hpp>
#include<ctime>
using namespace std;
using namespace cv;
cv::Mat image_make_border(cv::Mat &src);
int main(void)
{
Mat test = imread("liu.jpg", 0);
cv::Mat result=image_make_border(test);
imshow("original", test);
imshow("result", result/255);
waitKey(0);
system("pause");
return 0;
}
// 影像邊界處理
cv::Mat image_make_border(cv::Mat &src)
{
cout << "src row:" << src.rows << endl;
cout << "src col:" << src.cols << endl;
int w = cv::getOptimalDFTSize(src.cols); // 獲取DFT變換的最佳寬度
int h = cv::getOptimalDFTSize(src.rows); // 獲取DFT變換的最佳高度
cout << "w:" << w << endl;
cout << "h:" << h << endl;
cv::Mat padded;
// 常量法擴充影像邊界,常量 = 0
cv::copyMakeBorder(src, padded, 0, h - src.rows, 0, w - src.cols, cv::BORDER_CONSTANT, cv::Scalar::all(0));
padded.convertTo(padded, CV_32FC1);
return padded;
}
測驗效果
該函式可以自動計算最適合進行離散傅里葉變換的影像尺寸大小,從而提高計算速度;從圖中可以看出,寬的尺寸非常合適,而高需要擴展到4096,從而多了下方的黑線區域,擴展的數值由copyMakeBorder函式決定,后續會介紹該函式~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287828.html
標籤:其他
