#include #include "cl_class.h" #include #include #include // Maximum number of corners. #define FAST_COUNT (1 << 18) int main() { opencl gpu; /* gpu.make_kernel("int_add"); int A[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int B[] = { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0 }; gpu.write_buf(0,0,10,A); gpu.write_buf(0,1,10,B); int C[10]; gpu.run(0,10,1,1,2,10,C); std::cout << " result: \n"; for (int i = 0; i < 10; i++){ std::cout << C[i] << " "; } std::cout << std::endl; int A1[] = { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int B1[] = { 0, 1, 2, 0, 1, 2, 0, 1, 2, 10}; gpu.reload_buf(0,0,A1); gpu.reload_buf(0,1,B1); int C1[10]; gpu.run(0,10,1,1,2,10,C1); std::cout << " result: \n"; for (int i = 0; i < 10; i++){ std::cout << C1[i] << " "; } std::cout << std::endl; gpu.make_kernel("double_add"); double A2[] = { 0.2, 1.3, 2.5, 3.6, 4.9, 5.12, 6.5, 7.6, 8.4, 9.1 }; double B2[] = { 0.0, 1.0, 2.0, 0.0, 1.0, 2.0, 0.0, 1.0, 2.0, 0.0 }; gpu.write_buf(1,0,10,A2); gpu.write_buf(1,1,10,B2); double C2[10]; gpu.run(1,10,1,1,2,10,C2); std::cout << " result: \n"; for (int i = 0; i < 10; i++){ std::cout << C2[i] << " "; } std::cout << std::endl; */ gpu.make_kernel("fast_gray"); cv::Mat img = cv::imread("../frame0287.jpg", CV_8UC1); cv::Mat imageRGBA; cv::Mat downSampled; //cv::imshow("test2",img); //cv::waitKey(); cv::resize(img, downSampled, cv::Size(752, 480)); cv::cvtColor(downSampled, imageRGBA, CV_GRAY2RGBA); gpu.write_buf(0,0,downSampled); //cv::imshow("test2",downSampled); //cv::waitKey(); cl_int2 corners_[740*450]; gpu.write_buf(0,1,740*450,corners_); int icorner[1]={0}; gpu.write_buf(0,2,1,icorner); int fast_count=FAST_COUNT; gpu.write_buf(0,3,fast_count); printf("\nOpenCL version\n"); double time_accumulator = 0; for(int i=0;i<1000;++i){ double t = (double)cv::getTickCount(); gpu.reload_buf(0,0,downSampled); int icorner[1]={0}; gpu.reload_buf(0,2,icorner); gpu.run(0,752,480,1); time_accumulator += ((cv::getTickCount() - t) / cv::getTickFrequency()); } printf("OpenCL took %f ms (average over %d trials).\n", time_accumulator/((double)1000)*1000.0, 1000 ); int icorner_[1]={0}; gpu.read(0,2,icorner_); cl_int2 corners[740*450]; gpu.read(0,1,corners); //double t = (double)cv::getTickCount(); //cv::Mat condition=cv::Mat::ones(cv::Size(752,480),CV_8UC1); //gpu.run(2,752,480,1,6,360960,condition.data); int count=0; for(int i=0;i750 || corners[i].y>450 || corners[i].y<0)continue; cv::circle(imageRGBA, cv::Point(corners[i].x,corners[i].y ), 1, cv::Scalar(0, 0,255),1); ++count; } cv::imwrite("test3.png",imageRGBA); std::cerr<