I am using OpenCV, and want to accelerate some image processings using the GPU.
So i’ve decided to test some functions from the Visionworks SDK, and i’ve first tried to use some basic functions like ‘nvxuCopyImage’ for copying images.
The simple code below does not return any error, but the destination image is completely BLACK.
I am surely missing something, any help ? Thanks.!
// create Visionworks context
m_vxCtx = vxCreateContext();
// load SOURCE image in 8-bit grayscale format
cv::Mat matSrc;
matSrc = cv::imread(“/home/ubuntu/cap.png”, cv::IMREAD_GRAYSCALE);
// wrap OpenCV SOURCE image in a visionworks image
vx_imagepatch_addressing_t src_addr;
src_addr.dim_x = matSrc.cols;
src_addr.dim_y = matSrc.rows;
src_addr.stride_x = sizeof(vx_uint8);
src_addr.stride_y = matSrc.step;
void* src_ptrs = {matSrc.data};
vx_image vxiSrc = vxCreateImageFromHandle(m_vxCtx, VX_DF_IMAGE_U8, &src_addr, src_ptrs, VX_IMPORT_TYPE_HOST);
// create destination image (same size & type as SOURCE)
cv::Mat matDst;
matDst = cv::Mat(matSrc.rows, matSrc.cols, CV_8UC1);
// wrap OpenCV DEST image in a visionworks image
vx_imagepatch_addressing_t dst_addr;
dst_addr.dim_x = matDst.cols;
dst_addr.dim_y = matDst.rows;
dst_addr.stride_x = sizeof(vx_uint8);
dst_addr.stride_y = matDst.step;
void* dst_ptrs = {matDst.data};
vx_image vxiDst = vxCreateImageFromHandle(m_vxCtx, VX_DF_IMAGE_U8, &dst_addr, dst_ptrs, VX_IMPORT_TYPE_HOST);
// copy ‘src’ => ‘dst’ using GPU
// the function returns 0 (success)
vx_status status = nvxuCopyImage(m_vxCtx, vxiSrc, vxiDst);
// display images
cv::imshow(“dbg1”, m_matSrc); // matSrc is ok
cv::imshow(“dbg2”, matDst); // matDst is completely black
cv::waitKey(0);
// release context
vxReleaseContext(&m_vxCtx);