97 lines
3.0 KiB
C++
Executable File
97 lines
3.0 KiB
C++
Executable File
#include <iostream>
|
|
#include "cl_class.h"
|
|
#include <opencv2/opencv.hpp>
|
|
#include <opencv2/core.hpp>
|
|
#include <opencv2/core/mat.hpp>
|
|
// 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 s (average over %d trials).\n", time_accumulator, 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;i<icorner_[0];++i){
|
|
if(corners[i].x<0 || corners[i].x>750 || 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<<count<<'\n';
|
|
|
|
cv::waitKey();
|
|
gpu.clear_buf();
|
|
return 0;
|
|
}
|