OpenCv Mat を vx_image に変換するためのリファレンスとして opencv_npp_interop の例に従っていますが、この例はグレースケール イメージ (単一チャネル) のみを示しています。そこで、3 チャンネル (RGB) マットを vx_image (RGB) に変更しようとしました。
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 のプレーン数属性を照会すると、1 つのプレーンしか表示されません。私はそれが3プレーン(RGB)であるべきだと仮定しています。
次に、返されたはずの RGB 画像を YUV に変換してプレーンをクエリすると、3 つのプレーンが得られますが、個別のチャンネルを抽出すると「Y」チャンネルしか抽出できず、他の 2 つの vxuChannelExtract 呼び出しは「-10」になります。 : 無効なパラメータ".
したがって、問題の原因はまだRGB変換にあると思います。私は何を間違えましたか?