This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VH-Q1:UYVY 摄像头到 U16

Guru**** 2337880 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1525750/tda4vh-q1-uyvy-cam-to-u16

器件型号:TDA4VH-Q1

工具/软件:

大家好、我使用的是 SDK 9.2 版本。我的相机格式为 UYVY 格式

但我希望通过 vxMapImagePatch 访问每个像素并处理所需的映像

在单摄像头应用中捕捉后进入显示节点之前

obj->capt_yuv_image = (vx_image)vxGetObjectArrayItem(obj->cap_frames[0], 0);

...


    for(i=0; i<frm_loop_cnt; i++)
     {
         vx_image test_image;
         appPerfPointBegin(&obj->total_perf);
         graph_parameter_num = 0;
         if(status == VX_SUCCESS)
         {
             status = vxGraphParameterDequeueDoneRef(obj->graph, graph_parameter_num, (vx_reference*)&out_capture_frames, 1, &num_refs_capture);
         }
         graph_parameter_num++;
         if((status == VX_SUCCESS) && (obj->test_mode == 1))
         {
             status = vxGraphParameterDequeueDoneRef(obj->graph, 1, (vx_reference*)&test_image, 1, &num_refs_capture);
         }
 
         if((status == VX_SUCCESS) && (obj->mosaic_enable == 1) && obj->mosaic_enqueue == 1)
         {
             status = vxGraphParameterDequeueDoneRef(obj->graph, 1, (vx_reference*)&obj->imgMosaicObj.output_image, 1, &num_refs_capture);
             graph_parameter_num++;
         }
 

     vx_image image = (vx_image)vxGetObjectArrayItem(out_capture_frames, 0);
     
     converToU16(image);
     
     
...



obj->display_image = obj->capt_yuv_image;



     

但是、由于修改了代码、

显示屏幕保持不变、残像最多保留 4 帧、即缓冲区的数量

如果我使用“S"键“键进行捕获、

第一个图像应用良好、第二个图像作为 UYVY 图像出来、并按照此规则重复

我想修改捕获节点的结果、将其放入显示节点并将其喷洒到显示屏上。 哪个部件错了?

谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kim:

    您的意思是“UYVY cam to U16“?

    这是可能的、通常通过为所需的处理创建一个新的 openvx 节点并在捕获和显示节点之间添加处理节点来实现。

    显示屏幕保持不变、余像最多保留 4 帧、即缓冲区数量
    vx_image image =(vx_image) vxGetObjectArrayItem (out_capture_frames、0); 

    converToU16(图像);
    ...

    obj->display_image = obj->capt_yu_image;

    我想您必须“获取“、“处理“、然后“释放“这些映像、以便整个流水线可以继续运行。
    在上面的代码中、我不确定您是否正确操作。
    如果您为自己的处理创建了一个新的 opnevx 节点、则可以由 openvx 框架自动处理缓冲区管理。

    我们的软件专家 Gokul S 被复制,以供他的意见和任何进一步的问题,你可能会有。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好
    按照您的建议、我在捕获节点和显示节点之间创建了一个自定义节点、并应用了所需的算法。

    因此、我确认显示屏上显示了我想要的内容。

    但是、存在一个小问题、但存在一个问题、即在存在移动的区域中仅出现一条轻微的水平线并消失。

    自定义节点采用 Vx_image 的形式、包括输入和输出。

    捕获节点-> obj->cap_frames[0]-> vx_image ->自定义节点-> vx_image ->显示节点

    会有什么问题

    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kim:

    按照您的建议、我在捕获节点和显示节点之间创建了一个自定义节点、并应用了所需的算法。

    [/报价]

    感谢您的更新、这是一个好消息!

    但存在一个问题、即只有轻微的水平线才会出现、并且会在移动区域消失。

    这听起来像是同步或性能过载问题。
    理论上、Vx_image 应在发送以显示之前完全更新、以避免出现这些水平线。

    尊敬的 Gokul S
    请告知您。

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好
    摄像头帧通常为 30fps、显示屏似乎没有延迟。


    我很好奇、如果我将捕获输出 vx_object_array 转换为 vx_image、

    将其作为节点输入、将输出接收为 vx_image、

    并将其移交给显示器、是否会将四个采集缓冲区的内容传送到显示器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kim:

    如果您查看下面的示例代码、可以看到我们从捕获数组中获取节点的输入图像并为节点输出创建图像。
    这也应该非常适合您的节点。

    https://git.ti.com/cgit/processor-sdk/vision_apps/tree/apps/utilities/app_heterogeneous/app_heterogeneous.c?h=main#n539

                raw_viss[ci] = (tivx_raw_image) vxGetObjectArrayItem(capture_frames[ci][0], 0);
                yuv_viss[ci] = vxCreateImage(context, width[ci], height[ci], VX_DF_IMAGE_NV12);
     

    您的视频问题通常是节点实现中的软件问题、例如高速缓存一致性。