首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VisionWorks从Mat创建Mat vx_image

VisionWorks从Mat创建Mat vx_image
EN

Stack Overflow用户
提问于 2016-04-14 05:36:12
回答 1查看 908关注 0票数 0

我以opencv_npp_interop示例作为参考,将OpenCv Mat转换为vx_image,但该示例仅显示灰度图像(单通道)。因此,我尝试将它修改为3通道(RGB) Mat到vx_image (RGB)。

代码语言:javascript
运行
复制
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的平面数,我只显示一个平面。而我假设它应该是3平面(RGB)。

第二,如果我现在将返回的RGB图像转换为YUV并查询平面,我会得到3个平面,但是当我提取单独的通道时,我只能提取"Y“通道,另外两个vxuChannelExtract调用导致"-10 :无效的params”。

因此,我假设问题的根源仍然是RGB转换。我做错什么了?

EN

回答 1

Stack Overflow用户

发布于 2016-07-22 09:02:44

在文档中,RGB格式只有一个平面。

VX_DF_IMAGE_RGB -一个24位像素的平面作为3个交错的8位R单元,然后是G然后是B数据.

也许您为YUV频道指定了错误的枚举,我成功地做到了以下几点:

代码语言:javascript
运行
复制
vx_image image = createRGBImageFromRGBMat(context, mat);
vx_image yuv = vxCreateImage(context, mat.cols, mat.rows, VX_DF_IMAGE_YUV4);
vxuColorConvert(context, image, yuv);
vx_image y = vxCreateImage(context, mat.cols, mat.rows, VX_DF_IMAGE_U8);
vx_image u = vxCreateImage(context, mat.cols, mat.rows, VX_DF_IMAGE_U8);
vx_image v = vxCreateImage(context, mat.cols, mat.rows, VX_DF_IMAGE_U8);

vxuChannelExtract(context, yuv, VX_CHANNEL_Y, y);
vxuChannelExtract(context, yuv, VX_CHANNEL_U, u);
vxuChannelExtract(context, yuv, VX_CHANNEL_V, v);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36614605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档