在发现opencv运行SVD::compute()过程太慢,一张299*299的图片Debug要几s,release也要0.5s。
第一次尝试:
将299*299图像分成13份23*299的图像运行svd。release模式下能达到0.25s,将近快一倍。
第二次:
加上UMat,成绩感人。release模式下速度0.02s,又快了10倍。
void main()
{
Mat img = Mat(height, width, CV_8UC1, image);
Mat src_ = img.clone();
Mat dst_show = Mat(img.size(), CV_8UC1, Scalar(0));
int set_height = 23;
double t1 = getTickCount();
for (int i = 0; i < 13; i++)
{
Mat src;
src = Mat(img, Rect(0, 0 + i * set_height, img.cols, set_height));
src.convertTo(src, CV_64FC1);
UMat U, W, V;
SVD::compute(src, W, U, V);
int set_dim = min(src.rows, src.cols);
UMat W_;
Mat(set_dim, set_dim, CV_64FC1, Scalar(0)).copyTo(W_);
for (int i = 0; i < kvalue; i++)
{
W_.getMat(ACCESS_READ).at<double>(i, i) = W.getMat(ACCESS_READ).at<dou