openCVを使用してNVidiaGPUにコンピュータービジョンアルゴリズムを実装しようとしています。私はopenCV2.4を使用しており、現在、openCVに慣れるための非常に単純なプログラムを作成しています。行列を転置し、GPUにキャニーエッジ検出を実装する簡単なコードを作成しました。プログラムは完全に実行されていますが、CPUとGPUの両方でメモリの割り当てを解除する必要があります。だから私は以下に私のコードを投稿しています:
int main(int argc,char *argv[])
{
int k;
cv::Mat src;
cv::Mat dest;
cv::Mat dest_1;
cv::gpu::GpuMat im_source;
cv::gpu::GpuMat im_dest;
cv::gpu::GpuMat im_dest_1;
cv::gpu::Stream::Null;
k = cv::gpu :: getCudaEnabledDeviceCount();
printf("%d\n",k);
src = cv::imread("lena.jpg",0);
cv::imshow("lena_org",src);
im_source.upload(src);
cv::gpu::transpose(im_source,im_dest);
im_dest.download(dest);
cv::imshow("lena_trans",dest);
cv::gpu::Canny(im_source,im_dest_1,100,100,3,false);
im_dest_1.download(dest_1);
cv::imshow("lena_edge",dest_1);
cv::waitKey();
}
したがって、上記のコードから、CPUとGPUの両方でメモリが解放されていないと思います。インターネットを少し検索していて、cpu :: Mat :: Releaseforcpuとcv::gpu :: GpuMat :: ReleaseforGPU側に出くわしました。しかし、CPUとGPUのメモリを解放するために、それらの使用方法やコードでこの関数を使用する方法がわかりません。誰かがリリースAPIの正しい使用法を案内してくれれば、メモリを正常に解放できるので非常に役立ちます。たくさんのご支援ありがとうございます。