简体   繁体   English

vx_image 的数组

[英]An array to vx_image

I would like to create a vx_image out of an array.我想从数组中创建一个 vx_image。 Let us say i have 2D array:假设我有二维数组:

unsigned char img_array[720][1280]={{..},{..}, ... }   // filled with values

I would like to make it我想做到

vx_image

so that i can perform various pixel level operations.这样我就可以执行各种像素级操作。 Any other idea to do the same thing would also be fine.任何其他做同样事情的想法也可以。

I think the best way to interoperate is: from VX(CUDA) to CUDA(native) OR OpenCV(CUDA) and vice-versa. 我认为最好的互操作方式是:从VX(CUDA)到CUDA(native)或OpenCV(CUDA),反之亦然。 One of the nice way is given here . 这里给出一种不错的方法。 And the other possible way is below (This snippet is taken from VisionWorks Document): 下面是另一种可能的方式(此摘录摘自VisionWorks文档):

void processImageWithCUDA(vx_image src, vx_image dst)
{
    vx_df_image format = 0;
    vxQueryImage(src, VX_IMAGE_ATTRIBUTE_FORMAT, &format, sizeof(format));
    assert( format == VX_DF_IMAGE_RGB );
    // Get valid region
    vx_rectangle_t rect;
    vxGetValidRegionImage(src, &rect);
    // Map VisionWorks data objects into CUDA device memory
    vx_map_id src_map_id;
    vx_uint8* src_ptr;
    vx_imagepatch_addressing_t src_addr;
    vxMapImagePatch(src, &rect, 0, &src_map_id, &src_addr, (void **)&src_ptr, VX_READ_ONLY, NVX_MEMORY_TYPE_CUDA, 0);
    vx_map_id dst_map_id;
    vx_uint8* dst_ptr;
    vx_imagepatch_addressing_t dst_addr;
    vxMapImagePatch(dst, &rect, 0, &dst_map_id, &dst_addr, (void **)&dst_ptr, VX_WRITE_ONLY, NVX_MEMORY_TYPE_CUDA, 0);
    // Call CUDA function
    cudaStream_t stream = NULL;
    myOperations_image(src_addr.dim_x, src_addr.dim_y,
                       stream);
    cudaStreamSynchronize(stream);
    // Unmap VisionWorks data objects from CUDA device memory
    vxUnmapImagePatch(src, src_map_id);
    vxUnmapImagePatch(dst, dst_map_id);
}

In both the cases we are not copying to host memory, else it will drastically degrade performance, with a caveat that operations inside myOperations_image() should also maintain this rule. 在这两种情况下,我们都不会复制到主机内存,否则会极大地降低性能,同时需要注意的是,myOperations_image()中的操作也应保持该规则。

You can use the method vxCreateImageFromHandle to create a vx_image from externally allocated memory: https://www.khronos.org/registry/OpenVX/specs/1.1/html/df/d09/group__group__image.html#ga5abb694617a79024621e3ba95237a109 .您可以使用方法vxCreateImageFromHandle从外部分配的 memory 创建一个vx_imagehttps://www.khronos.org/registry/OpenVX/specs/1.1/html/df/d09/group__group__image.html#ga5abb694617a79024621e3ba95237a109

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM