OpenCV圖像輪廓提取的實現(xiàn)_第1頁
OpenCV圖像輪廓提取的實現(xiàn)_第2頁
OpenCV圖像輪廓提取的實現(xiàn)_第3頁
OpenCV圖像輪廓提取的實現(xiàn)_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第OpenCV圖像輪廓提取的實現(xiàn)2.f/159.f,4.f/159.f,5.f/159.f,4.f/159.f,2.f/159.f,

4.f/159.f,9.f/159.f,12.f/159.f,9.f/159.f,4.f/159.f,

5.f/159.f,12.f/159.f,15.f/159.f,12.f/159.f,5.f/159.f,

4.f/159.f,9.f/159.f,12.f/159.f,9.f/159.f,4.f/159.f,

2.f/159.f,4.f/159.f,5.f/159.f,4.f/159.f,2.f/159.f,

cudaMemcpyToSymbol(convolutionKernelStore,gaussianKernel5x5,sizeof(gaussianKernel5x5),0);

constunsignedintgaussianKernel5x5Offset=0;

//Sobelgradientkernels

constfloatsobelGradientX[9]=

-1.f,0.f,1.f,

-2.f,0.f,2.f,

-1.f,0.f,1.f,

constfloatsobelGradientY[9]=

1.f,2.f,1.f,

0.f,0.f,0.f,

-1.f,-2.f,-1.f,

cudaMemcpyToSymbol(convolutionKernelStore,sobelGradientX,sizeof(sobelGradientX),sizeof(gaussianKernel5x5));

cudaMemcpyToSymbol(convolutionKernelStore,sobelGradientY,sizeof(sobelGradientY),sizeof(gaussianKernel5x5)+sizeof(sobelGradientX));

constunsignedintsobelGradientXOffset=sizeof(gaussianKernel5x5)/sizeof(float);

constunsignedintsobelGradientYOffset=sizeof(sobelGradientX)/sizeof(float)+sobelGradientXOffset;

//CreaCPU/GPUimagenescompartidos

cameraframe;

unsignedchar*sourceDataDevice,*blurredDataDevice,*edgesDataDevice;

cv::Matsource(frame.size(),CV_8U,createImageBuffer(frame.size().width*frame.size().height,sourceDataDevice));

cv::Matblurred(frame.size(),CV_8U,createImageBuffer(frame.size().width*frame.size().height,blurredDataDevice));

cv::Matedges(frame.size(),CV_8U,createImageBuffer(frame.size().width*frame.size().height,edgesDataDevice));

//Crea2imagenestemporales(sobelgradients)

unsignedchar*deviceGradientX,*deviceGradientY;

cudaMalloc(deviceGradientX,frame.size().width*frame.size().height);

cudaMalloc(deviceGradientY,frame.size().width*frame.size().height);

//Loopwhilecapturaimagenes

while(1)

//Capturalaimagenenescaladegrises

cameraframe;

cvtColor(frame,source,COLOR_RGB2GRAY);

_sleep(1);

//Grabaeltiempoquedemoraelproceso

cudaEventRecord(start);

//convolutionkernelparametros

dim3cblocks(frame.size().width/16,frame.size().height/16);

dim3cthreads(16,16);

//pythagorankernelparametros

dim3pblocks(frame.size().width*frame.size().height/256);

dim3pthreads(256,1);

//gaussianblur(firstkernelinstore@0)

convolvecblocks,cthreads(sourceDataDevice,frame.size().width,frame.size().height,0,0,gaussianKernel5x5Offset,5,5,blurredDataDevice);

//sobelgradientconvolutions(xypaddingisnow2becausethereisaborderof2arounda5x5gaussianfilteredimage)

convolvecblocks,cthreads(blurredDataDevice,frame.size().width,frame.size().height,2,2,sobelGradientXOffset,3,3,deviceGradientX);

convolvecblocks,cthreads(blurredDataDevice,frame.size().width,frame.size().height,2,2,sobelGradientYOffset,3,3,deviceGradientY);

pythagoraspblocks,pthreads(deviceGradientX,deviceGradientY,edgesDataDevice);

cudaThreadSynchronize();

cudaEventRecord(stop);

//Muestratiempodeejecucion

floatms=0.0f;

cudaEventSynchronize(stop);

cudaEventElapsedTime(ms,start,stop);

std::cout"ElapsedGPUtime:"ms"milliseconds"std::endl;

//Muestraresultados

imshow("Source",frame);

imshow("Greyscale",source);

imshow("Blurred",blurred);

imshow("Sobel",edges);

//Spin

if(cv::waitKey(1)==27)break;

//Exit

cudaFreeHost(source.data);

cudaFreeHo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論