Данный пример кода, такой как в этом предыдущем вопросе (проверка ошибок удалена для краткости):
vx_image inputImage = vxCreateImage( graph, width, height, VX_DF_IMAGE_S16 );
vx_image outputImage = vxCreateImage( graph, width, height, VX_DF_IMAGE_S16 );
vx_graph graph = vxCreateGraph( context );
vx_image intermediate1 = vxCreateVirtualImage( graph, width, height, VX_DF_IMAGE_S16 );
vx_image intermediate2 = vxCreateVirtualImage( graph, width, height, VX_DF_IMAGE_S16 );
vx_image intermediate3 = vxCreateVirtualImage( graph, width, height, VX_DF_IMAGE_S16 );
vxSobel3x3Node(graph,inputImage,intermediate1,intermediate2);
vxMagnitudeNode(graph,intermediate1,intermediate2,intermediate3);
vxConvertDepthNode(graph,intermediate3,outputImage,VX_CONVERT_POLICY_WRAP,0);
vxVerifyGraph( graph );
vxProcessGraph( graph );
И классический цикл чтения видео OpenCV:
cv::VideoCapture cap;
cap.open("/Testing/test.avi");
for(;;)
{
cv::Mat frame;
cap >> frame;
if( frame.empty() ) break;
// TODO: what goes here?
vxProcessGraph( graph );
}
Как мне получить frame
в inputImage
, чтобы я мог правильно позвонить vxProcessGraph()
?Я знаю, что:
vx_image image = nvx_cv::createVXImageFromCVMat(frame);
Является помощником для получения vx_image
, но я не могу найти пример того, что делать дальше.Некоторая документация по NVidia, которую я прочитал, предложила:
vxAccessImagePatch(...);
// copy pixel-by-pixel??
vxCommitImagePatch(...);
Однако, это кажется слишком грубым, так что есть какой-то более хороший способ (vxSetParameter
, возможно, но документация очень неясна)сделать это?