Hello everyone ,
I do not understand why i can’t do a simpel covolution (i newby in this framework) please i have some help
i did a simple function called like that :
vx_image vxSrc1 ; //init with a loaded image 3channel
vx_image vxOutBlur;
convol1(context,vxContext , vxSrc1 , vxOutBlur)void colorBlur(vx_context m_vxCtx, vx_image& vxiSrc, vx_image& vxiOut)
{
vx_uint32 width = 0, height = 0;
vx_uint32 colorFormat=0;NVXIO_SAFE_CALL( vxQueryImage(vxiSrc, VX_IMAGE_ATTRIBUTE_WIDTH, &width, sizeof(width)) ); NVXIO_SAFE_CALL( vxQueryImage(vxiSrc, VX_IMAGE_ATTRIBUTE_HEIGHT, &height, sizeof(height)) ); NVXIO_SAFE_CALL( vxQueryImage(vxiSrc, VX_IMAGE_ATTRIBUTE_FORMAT, &colorFormat, sizeof(colorFormat)) ); vxiOut = vxCreateImage(m_vxCtx, width, height, VX_DF_IMAGE_RGB); vx_image vxr = vxCreateImage(m_vxCtx, width, height, VX_DF_IMAGE_U8); vx_image vxg = vxCreateImage(m_vxCtx, width, height, VX_DF_IMAGE_U8); vx_image vxb = vxCreateImage(m_vxCtx, width, height, VX_DF_IMAGE_U8); vx_status status1 = vxuChannelExtract(m_vxCtx, vxiSrc, VX_CHANNEL_R, vxr); vx_status status2 = vxuChannelExtract(m_vxCtx, vxiSrc, VX_CHANNEL_G, vxg); vx_status status3 = vxuChannelExtract(m_vxCtx, vxiSrc, VX_CHANNEL_B, vxb); std::cout<<" Status color1: "<<status1; std::cout<<" Status color2: "<<status2; std::cout<<" Status color3: "<<status3<<"\n"; vx_graph graph = vxCreateGraph(m_vxCtx); vx_image virt_U8R = vxCreateVirtualImage(graph, width,height , VX_DF_IMAGE_U8); vx_image virt_U8G = vxCreateVirtualImage(graph, 0, 0, VX_DF_IMAGE_U8); vx_image virt_U8B = vxCreateVirtualImage(graph, 0, 0, VX_DF_IMAGE_U8); /// Gaussian Blur vx_int16 kernel[3][3]={{1,2,1},{2,4,2},{1,2,1}}; vx_uint32 scale=16; // sum of kernel vx_convolution conv_k= vxCreateConvolution(m_vxCtx,3,3); vxCopyConvolutionCoefficients(conv_k,&kernel,VX_WRITE_ONLY,VX_MEMORY_TYPE_HOST); vxSetConvolutionAttribute(conv_k,VX_CONVOLUTION_SCALE,&scale,sizeof(scale)); vx_node nodeConv1=vxConvolveNode(graph,vxr, conv_k,virt_U8R); vx_status statusConv1=vxGetStatus((vx_reference)nodeConv1); std::cout<<" Status convR: "<<statusConv1<<"\n"; vx_node nodeConv2=vxConvolveNode(graph,vxg, conv_k,virt_U8G); vx_status statusConv2=vxGetStatus((vx_reference)nodeConv1); std::cout<<" Status convG: "<<statusConv2<<"\n"; vx_node nodeConv3=vxConvolveNode(graph,vxb, conv_k,virt_U8B); vx_status statusGraf= vxSetGraphAttribute(graph, NVX_GRAPH_VERIFY_OPTIONS, "-O3", strlen("-O3")) ; std::cout<<" Status convG: "<<statusConv2<<"\n"; vx_status statusConv = vxVerifyGraph(graph); std::cout<<" Status convB: "<<statusConv<<"\n"; ///////////////testSplit cannal split //////////// cv::Mat cvr = cv::Mat(height,width, CV_8UC1); VX2MatC1(m_vxCtx, virt_U8R, cvr); // based on https://forums.developer.nvidia.com/t/convert-vx-image-to-cv-mat/58737 cv::imwrite("cvR2Bis.jpg",cvr); vx_status status = vxuChannelCombine(m_vxCtx, virt_U8B, virt_U8G, virt_U8R, NULL, vxiOut);
}
I also test with nxuConvolve() but despit the status 0 the image convolve is not applied
thanks for your help