雙線性插值GPU加速

2021-07-24 06:43:51 字數 2276 閱讀 3933

#include 

#include "time.h"

#include

#include

#include

#include

using

namespace

std;

using

namespace cv;

__global__ void gpu_bilinear(const uchar *cuda_original_img, uchar *cuda_resize_img,

int original_cols, int original_rows, int resize_cols, int resize_rows)

else

if (ax > original_cols - 1)

if (ay < 0)

else

if (ay > original_rows - 1)

a = ax + ay*original_cols;

b = ax + ay*original_cols + 1;

c = ax + ay*original_cols + original_cols;

d = ax + ay*original_cols + original_cols + 1;

w1 = floor(fx) - fx;

w2 = 1 - w1;

w3 = floor(fy) - fy;

w4 = 1 - w3;

for (int c = 0; c < 3; ++c)

}}cv::mat gpu_resize(cv::mat input_img, float scale)

void cpu_bilinear(cv::mat const orign_img, cv::mat &resize_img, float original_w, float original_h, int resize_w, int resize_h)

}cv::mat cpu_resize(cv::mat input_img, float scale)

}return resize_img;

}int main()

finish = clock();

resize_c = cpu_resize(img, scale);

resize_g = gpu_resize(img, scale);

resize(img, resize_cv, size(img.rows*scale, img.cols*scale));

imshow("opencv", resize_cv);

imshow("cpu", resize_c);

imshow("gpu", resize_g);

cvwaitkey(1);

duration = (double)(finish - start) / clocks_per_sec;

cout

<< duration << endl;

//system("pause");

return

0;}

下面貼乙個cmakelists.txt 有些同學可能喜歡在linux下操作。linux下的編譯速度比windows快了10倍的樣子吧,實在沒法忍受在windows下除錯。而且有時可能因為視訊記憶體的問題,正常的**執行結果有錯+_+

cmake_minimum_required(version 2.8)  

project(test_cuda)

find_package(cuda required)

find_package(opencv required)

include_directories(/usr/local/cuda-7.5/include)

set(cuda_nvcc_flags_debug "-g -g")

set(cmake_cxx_flags_debug "-g")

set(gencode -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=compute_35)

set(gencode $ -gencode=arch=compute_20,code=sm_20)

cuda_add_executable(test_cuda test.cu options $)

target_link_libraries(test_cuda $)

有點偷懶,幾乎是只貼了**。gpu的除錯比較麻煩,之前因為一些邊界問題調的有些煩。。。

雙線性插值

雙線性插值作為opencv中預設使用的影象縮放演算法,其效果和速度都是不錯的。並且效果也比較穩定,計算複雜度並不算太高。我看了很多網上的演算法,自己也沒看太懂,下面是從網上找的雙線性插值 演算法的講解。影象的雙線性插值放大演算法中,目標影象中新創造的象素值,是由源影象位置在它附近的2 2區域4個鄰近...

雙線性插值

轉至 雙線性插值,這個名字咋一聽很高大上的樣紙,再在維基百科上一查 見文末,我去,一堆的公式嚇死人 像俺這種半文盲,看到公式腦子就懵的型別,真心給跪。雖然看著好複雜,但仔細一看道理再簡單不過了,所以還是自己梳理一下好。雙線性插值,顧名思義就是兩個方向的線性插值加起來 這解釋過於簡單粗暴,哈哈 所以只...

雙線性插值

雙線性插值就是在x軸和y軸兩個方向上進行插入操作。假設a b兩個點,要在ab中間插入乙個點c c座標在ab連線上 就直接讓c的值落在ab的連線上即可。例如a點座標 0,0 值為3,b點座標 0,2 值為5,要對座標 0,1 的點c進行插值,就讓c落在ab上,值就為4。如果c點不在ab線上,如圖所示 ...