我遵循 opencv_npp_interop 示例作为将 OpenCv Mat 转换为 vx_image 的参考,但该示例仅显示灰度图像(单通道)。所以我尝试将它的 3 通道 (RGB) Mat 修改为 vx_image (RGB)。
vx_image createRGBImageFromRGBMat(vx_context& context, cv::Mat& mat)
{
vx_imagepatch_addressing_t src_addr = {
mat.cols, mat.rows, sizeof(vx_uint8)*3, mat.cols * sizeof(vx_uint8)*3, VX_SCALE_UNITY, VX_SCALE_UNITY, 1, 1 };
void* src_ptr = mat.data;
vx_image image = vxCreateImageFromHandle(context, VX_DF_IMAGE_RGB, &src_addr, &src_ptr, VX_IMPORT_TYPE_HOST);
return image;
}
如果我查询返回的 vx_image 的平面数属性,我只显示 1 个平面。而我假设它应该是 3 平面 (RGB)。
其次,如果我现在将这个返回的所谓 RGB 图像转换为 YUV 并查询平面,我得到 3 个平面,但是当我提取单独的通道时,我只能提取“Y”通道,其他两个 vxuChannelExtract 调用导致“-10 :无效参数”。
所以我假设问题的根源仍然是 RGB 转换。我做错了什么 ?