您的位置:首页 > 运维架构

opencv GPU 简单遍历图像

2014-04-08 11:05 1731 查看
opencv GPU 简单遍历图像

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <cuda.h>
#include <cuda_device_runtime_api.h>
#include <opencv2\gpu\gpu.hpp>
#include <opencv2\gpu\gpumat.hpp>
#include <opencv2\opencv.hpp>
#include <opencv.hpp>
#include <stdio.h>
#include <iostream>
#include "opencv2/gpu/device/common.hpp"
#include "opencv2/gpu/device/reduce.hpp"
#include "opencv2/gpu/device/functional.hpp"
#include "opencv2/gpu/device/warp_shuffle.hpp"
using namespace std;
using namespace cv;
using namespace gpu;
template <int nthreads>
__global__ void compute_kernel(int height, int width, const PtrStepb img ,PtrStepb dst)
{
const int x = blockIdx.x * blockDim.x + threadIdx.x;
const int y = blockIdx.y * blockDim.y + threadIdx.y;

const uchar* src_y = (const uchar*)(img+y*img.step);//对于彩色图像
uchar* dst_y = (uchar*)(dst+y*dst.step);
if (x < width && y < height)
{

dst_y[3*x] = src_y[3*x] ;
dst_y[3*x+1]  = src_y[3*x+1] ;
dst_y[3*x+2]  = src_y[3*x+2] ;
}

////////////////////////////////////灰度图像//////////////////////////////////////
//if (x < width)
//         {
// if (blockIdx.y > 0 && blockIdx.y < height )
//          {
//	 ((float*)dst.ptr(blockIdx.y))[x] = ((float*)img.ptr(blockIdx.y))[x];
//	 //((uchar2*)dst.ptr(blockIdx.y))[x] = make_uchar2(blockIdx.y,blockIdx.x);
// }
//}
}
int main()
{
Mat a= imread("d:/1.jpg");
GpuMat d_a(a);
GpuMat d_dst(d_a.size(),CV_8UC3);
int width = a.size().width;
int height = a.size().height;
const int nthreads =256;
dim3 bdim(nthreads, 1);
dim3 gdim(divUp(width, bdim.x), divUp(height, bdim.y));
compute_kernel<nthreads><<<gdim, bdim>>>(height,width,d_a,d_dst);
Mat dst(d_dst);
imshow("a",a);
imshow("dst",dst);
waitKey();
return 0;
}




显示结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: