zoukankan      html  css  js  c++  java
  • opencv3.3 CUDA 初学实例

    //swap.cu  
      
      
    #include "cuda_runtime.h"  
    #include "device_launch_parameters.h"  
      
    #include <opencv2/core/cuda_devptrs.hpp>  
    using namespace cv;  
    using namespace cv::gpu;  
      
    //自定义内核函数  
    __global__ void swap_rb_kernel(const PtrStepSz<uchar3> src,PtrStep<uchar3> dst)  
    {  
        int x = threadIdx.x + blockIdx.x * blockDim.x;  
        int y = threadIdx.y + blockIdx.y * blockDim.y;  
      
        if(x < src.cols && y < src.rows)  
        {  
            uchar3 v = src(y,x);  
            dst(y,x) = make_uchar3(v.z,v.y,v.x);  
        }  
    }  
      
    extern "C" void swap_rb_caller(const PtrStepSz<uchar3>& src,PtrStep<uchar3> dst,cudaStream_t stream)  
    {  
        dim3 block(32,8);  
        dim3 grid((src.cols + block.x - 1)/block.x,(src.rows + block.y - 1)/block.y);  
      
        swap_rb_kernel<<<grid,block,0,stream>>>(src,dst);  
        if(stream == 0)  
            cudaDeviceSynchronize();  
    }  
    

      

    //swap.cpp  
      
      
      
    #include <opencv2/gpu/gpu.hpp>  
    #include <opencv2/gpu/stream_accessor.hpp>  
      
      
    using namespace cv;  
    using namespace cv::gpu;  
      
    extern "C" void swap_rb_caller(const PtrStepSz<uchar3>& src,PtrStep<uchar3> dst,cudaStream_t stream);  
      
    extern "C" void swap_rb(const GpuMat& src,GpuMat& dst,Stream& stream = Stream::Null())  
    {  
        CV_Assert(src.type() == CV_8UC3);  
        dst.create(src.size(),src.type());  
        cudaStream_t s = StreamAccessor::getStream(stream);  
        swap_rb_caller(src,dst,s);  
    }  
    

      

    //main.cpp  
      
    #include <iostream>  
    #include <opencv2/opencv.hpp>  
    #include <opencv2/gpu/gpu.hpp>  
      
    #pragma comment(lib,"opencv_gpu2410d.lib")  
    #pragma comment(lib,"opencv_core2410d.lib")  
    #pragma comment(lib,"opencv_highgui2410d.lib")  
      
    using namespace cv;  
    using namespace cv::gpu;  
      
    extern "C" void swap_rb(const GpuMat& src,GpuMat& dst,Stream& stream = Stream::Null());  
      
    int main()  
    {  
        Mat image = imread("lena.jpg");  
        imshow("src",image);  
        GpuMat gpuMat,output;  
      
        gpuMat.upload(image);  
        swap_rb(gpuMat,output);  
        output.download(image);  
      
        imshow("gpu",image);  
        getchar();  
        waitKey(0);  
        return 0;  
    }  
    

      

  • 相关阅读:
    yuv文件并行解析播放
    视频解析
    有意思的并查集讲解 收藏
    C++输入输出重载
    python 同步IO
    多线程与多进程的理解
    centos7 配置redis
    linux中的raid
    form表单系列中文件上传及预览
    centos7 安装swftools Apache_OpenOffice
  • 原文地址:https://www.cnblogs.com/luoyinjie/p/8042689.html
Copyright © 2011-2022 走看看