cuda入门——结合opncv和cuda编程(2)
来源:互联网 发布:领航一号软件下载 编辑:程序博客网 时间:2024/06/10 04:31
opencv读入图片,将图片数据传递到cuda处理
#include<iostream>#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<stdio.h>using namespace std;using namespace cv;#define NUM_BLOCK 300 // Number of thread blocks #define NUM_THREAD 64 __global__ void hello(uchar *a, uchar *b,int bins,int nthreads, int nblocks) { int i; int idx = blockIdx.x*blockDim.x+threadIdx.x; // Sequential thread index across the blocks for (i=idx; i<bins; i+=nthreads*nblocks) { a[idx]+=b[idx]; if(a[idx]>255)a[idx]=255;if(a[idx]<0)a[idx]=0; } } int main(){IplImage* img1=cvLoadImage("test1.jpg",0);IplImage* img2=cvLoadImage("test2.jpg",0);uchar* a=(uchar*)img1->imageData; uchar* b=(uchar*)img2->imageData; int N=img1->height*img1->widthStep;uchar *ad; uchar *bd; const int csize = N*sizeof(uchar); const int isize = N*sizeof(uchar); cudaMalloc( (void**)&ad, csize ); cudaMalloc( (void**)&bd, isize ); cudaMemcpy( ad, a, csize, cudaMemcpyHostToDevice ); cudaMemcpy( bd, b, isize, cudaMemcpyHostToDevice ); dim3 dimGrid(NUM_BLOCK,1,1); // Grid dimensions dim3 dimBlock(NUM_THREAD,1,1); // Block dimensions hello<<<dimGrid, dimBlock>>>(ad, bd,N,NUM_THREAD, NUM_BLOCK); cudaMemcpy( b, ad, csize, cudaMemcpyDeviceToHost ); cudaFree( ad ); cudaFree( bd ); cvNamedWindow("图像显示",CV_WINDOW_AUTOSIZE); cvShowImage("图像显示",img2); cvWaitKey(0);return 0; }参考代码:计算圆周率
#include <stdio.h>#include<windows.h>#include <cuda.h>#define NBIN 1000000000 // Number of bins#define NUM_BLOCK 300 // Number of thread blocks#define NUM_THREAD 64 // Number of threads per blockint tid;float pi = 0;// Kernel that executes on the CUDA device__global__ void cal_pi(float *sum, int nbin, float step, int nthreads, int nblocks) {int i;float x;int idx = blockIdx.x*blockDim.x+threadIdx.x; // Sequential thread index across the blocksfor (i=idx; i< nbin; i+=nthreads*nblocks) {x = (i+0.5)*step;sum[idx] += 4.0/(1.0+x*x);}} //Main routine that executes on the hostint main(void) { LARGE_INTEGER frec; LARGE_INTEGER strt; LARGE_INTEGER ed; QueryPerformanceFrequency(&frec); QueryPerformanceCounter(&strt); dim3 dimGrid(NUM_BLOCK,1,1); // Grid dimensionsdim3 dimBlock(NUM_THREAD,1,1); // Block dimensionsfloat *sumHost, *sumDev; // Pointer to host & device arraysfloat step = 1.0/NBIN; // Step sizesize_t size = NUM_BLOCK*NUM_THREAD*sizeof(float); //Array memory sizesumHost = (float *)malloc(size); // Allocate array on hostcudaMalloc((void **) &sumDev, size); // Allocate array on device// Initialize array in device to 0cudaMemset(sumDev, 0, size);// Do calculation on devicecal_pi <<<dimGrid, dimBlock>>> (sumDev, NBIN, step, NUM_THREAD, NUM_BLOCK); // call CUDA kernel// Retrieve result from device and store it in host arraycudaMemcpy(sumHost, sumDev, size, cudaMemcpyDeviceToHost);for(tid=0; tid<NUM_THREAD*NUM_BLOCK; tid++)pi += sumHost[tid];pi *= step;// Print resultsprintf("PI = %f\n",pi);// Cleanupfree(sumHost); cudaFree(sumDev); QueryPerformanceCounter(&ed); printf("%e\n",(ed.QuadPart-strt.QuadPart)*1000/frec.QuadPart); return 0;}
- cuda入门——结合opncv和cuda编程(2)
- 【OpenCV & CUDA】OpenCV和Cuda结合编程
- OpenCV和Cuda结合编程
- OpenCV和Cuda结合编程
- CUDA编程->CUDA入门了解(一)
- GPU编程之CUDA(一)——入门知识
- Cuda学习笔记(三)——Cuda编程Tips
- cuda与openCV结合编程(一)
- CUDA入门3.2——使用CUDA实现鱼眼转全景图(CUDA环节)
- cuda编程入门示例2---CUDA environment initialization
- 如何结合OPENCV2.2 和 CUDA
- CUDA编程入门
- CUDA编程入门资源
- CUDA 编程入门
- cuda 编程入门
- CUDA编程入门指南
- CUDA并行编程入门
- CUDA编程入门资料
- 结构体的嵌套问题
- Android 如何画圆饼图来表示智能机的市场份额
- 建行卡行家
- 新建maven工程作为引擎
- 再不'折腾'就老了
- cuda入门——结合opncv和cuda编程(2)
- windows编程之自己动手写WinMain函数
- UVa 12036 Stable Grid (想法题)
- 代码应该写的更简洁更优化
- 获取当前时间的毫秒数
- 和国家开放空间
- java定时器的使用
- cocos2d-x网络开发基础 HTTP的报文格式、GET和POST格式解析
- 在android 4.2.2上调试MU609步骤