i cannot find documentation or example on how resize ycbcr biplanar, supposedly main format should use on ios according apple. tried resize 2 planes this:
// resize luma vimage_buffer originalybuffer = { cvpixelbuffergetbaseaddressofplane(pixelbuffer, 0), cvpixelbuffergetheightofplane(pixelbuffer, 0), cvpixelbuffergetwidthofplane(pixelbuffer, 0), cvpixelbuffergetbytesperrowofplane(pixelbuffer, 0) }; vimage_buffer resizedybuffer; vimagebuffer_init(&resizedybuffer, image_height, image_width, 8 * sizeof(pixel_8), kvimagenoflags); error = vimagescale_planar8(&originalybuffer, &resizedybuffer, null, kvimagenoflags); assert(!error); cv::mat grey(image_height, image_width, cv_8uc1, resizedybuffer.data); // resize chroma vimage_buffer originaluvbuffer = { cvpixelbuffergetbaseaddressofplane(pixelbuffer, 1), cvpixelbuffergetheightofplane(pixelbuffer, 1), cvpixelbuffergetwidthofplane(pixelbuffer, 1), cvpixelbuffergetbytesperrowofplane(pixelbuffer, 1) }; vimage_buffer resizeduvbuffer; vimagebuffer_init(&resizeduvbuffer, image_height / 2, image_width / 2, 8 * sizeof(pixel_16u), kvimagenoflags); error = vimagescale_planar8(&originaluvbuffer, &resizeduvbuffer, null, kvimagenoflags); assert(!error);
but colors totally borked. luma channel works itself, it's problem chroma. format supposed use 2 bytes chroma, although not totally sure. if use vimagescale_planar8
half of screen green, else if use vimagescale_planar16u
blue/yellow noise on image.
you can use vimagescale_cbcr8
uv buffer, it's ios 10+ :
// resize luma vimage_buffer originalybuffer = { cvpixelbuffergetbaseaddressofplane(pixelbuffer, 0), cvpixelbuffergetheightofplane(pixelbuffer, 0), cvpixelbuffergetwidthofplane(pixelbuffer, 0), cvpixelbuffergetbytesperrowofplane(pixelbuffer, 0) }; vimage_buffer resizedybuffer; vimagebuffer_init(&resizedybuffer, image_height, image_width, 8 * sizeof(pixel_8), kvimagenoflags); error = vimagescale_planar(&originalybuffer, &resizedybuffer, null, kvimagenoflags); assert(!error); cv::mat grey(image_height, image_width, cv_8uc1, resizedybuffer.data); // resize chroma vimage_buffer originaluvbuffer = { cvpixelbuffergetbaseaddressofplane(pixelbuffer, 1), cvpixelbuffergetheightofplane(pixelbuffer, 1), cvpixelbuffergetwidthofplane(pixelbuffer, 1), cvpixelbuffergetbytesperrowofplane(pixelbuffer, 1) }; vimage_buffer resizeduvbuffer; vimagebuffer_init(&resizeduvbuffer, image_height / 2, image_width / 2, 8 * sizeof(pixel_16u), kvimagenoflags); error = vimagescale_cbcr8(&originaluvbuffer, &resizeduvbuffer, null, kvimagenoflags); assert(!error);
Comments
Post a Comment