我正在尝试将 a 中的数据复制cv::cuda::GpuMat到uint8_t*要在内核中使用的变量。
GpuMat 包含分辨率为 752x480 且类型为 CV_8UC1 的图像数据。下面是示例代码:
uint8_t *imgPtr;
cv::Mat left, downloadedLeft;
cv::cuda::GpuMat gpuLeft;
left = imread("leftview.jpg", cv::IMREAD_GRAYSCALE);
gpuLeft.upload(left);
cudaMalloc((void **)&imgPtr, sizeof(uint8_t)*gpuLeft.rows*gpuLeft.cols);
cudaMemcpyAsync(imgPtr, gpuLeft.ptr<uint8_t>(), sizeof(uint8_t)*gpuLeft.rows*gpuLeft.cols, cudaMemcpyDeviceToDevice);
// following code is just for testing and visualization...
cv::cuda::GpuMat gpuImg(left.rows, left.cols, left.type(), imgPtr);
gpuImg.download(downloadedLeft);
imshow ("test", downloadedLeft);
waitKey(0);
Run Code Online (Sandbox Code Playgroud)
但输出并不如预期。以下分别是输入和输出图像。
我已经尝试将cv::Mat源提供给cudaMemcpy. 看起来运行良好。问题似乎与cv::cuda::GpuMat和有关cudaMemcpy。这里讨论了类似的问题
另外,如果图像是 256 或 512,则程序似乎运行良好。
我缺少什么?应该怎样做才能使 752x480 图像正常工作?