//Generates Intensity Image Mat Get_Intensity_Image(Mat inputImage) { #ifdef GPU_MODE gpu::GpuMat d_src(inputImage); Mat retImage; gpu::GpuMat gputemp; vector<gpu::GpuMat> d_vec; gpu::split(d_src, d_vec); gpu::addWeighted(d_vec[0], 1.0/3, d_vec[1], 1.0/3, 0.0, gputemp, -1); gpu::addWeighted(gputemp, 1, d_vec[2], 1.0/3, 0.0, gputemp, -1); gputemp.download(retImage); asdf #else vector<Mat> rgb; Mat cputemp; Mat retImage; split(inputImage, rgb); addWeighted(rgb[0], 1.0/3, rgb[1], 1.0/3, 0.0, cputemp, -1); addWeighted(cputemp, 1, rgb[2], 1.0/3, 0.0, retImage, -1); #endif return retImage; }
int main(int argc, char *argv[]) { cv::Mat src = cv::imread("lena.jpg", cv::IMREAD_GRAYSCALE); cv::Mat dst(src.size(), src.type(), cv::Scalar(0)); cv::cuda::GpuMat d_src(src); cv::cuda::GpuMat d_dst(dst.size(), dst.type()); double f = 1000.0f / cv::getTickFrequency(); int64 start = 0, end = 0; start = cv::getTickCount(); // 自作カーネルの呼び出し launchMyKernel(d_src, d_dst); end = cv::getTickCount(); std::cout << ((end - start) * f) << " ms." << std::endl; d_dst.download(dst); cv::imwrite("dst.png", dst); return 0; }
GPU_PERF_TEST(HoughLines, cv::gpu::DeviceInfo, cv::Size, DoSort) { declare.time(30.0); const cv::gpu::DeviceInfo devInfo = GET_PARAM(0); cv::gpu::setDevice(devInfo.deviceID()); const cv::Size size = GET_PARAM(1); const bool doSort = GET_PARAM(2); const float rho = 1.0f; const float theta = CV_PI / 180.0f; const int threshold = 300; cv::RNG rng(123456789); cv::Mat src(size, CV_8UC1, cv::Scalar::all(0)); const int numLines = rng.uniform(500, 2000); for (int i = 0; i < numLines; ++i) { cv::Point p1(rng.uniform(0, src.cols), rng.uniform(0, src.rows)); cv::Point p2(rng.uniform(0, src.cols), rng.uniform(0, src.rows)); cv::line(src, p1, p2, cv::Scalar::all(255), 2); } cv::gpu::GpuMat d_src(src); cv::gpu::GpuMat d_lines; cv::gpu::GpuMat d_accum; cv::gpu::GpuMat d_buf; cv::gpu::HoughLines(d_src, d_lines, d_accum, d_buf, rho, theta, threshold, doSort); TEST_CYCLE() { cv::gpu::HoughLines(d_src, d_lines, d_accum, d_buf, rho, theta, threshold, doSort); } }