一、首先了解下nv12和nv21的数据排布
nv21
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
V U V U
V U V U
nv21
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
U V U V
U V U V
主要就是UV的顺序不同,交互一下UV的位置就可以互换NV12和NV21.
二、bgr(rgb)转nv21(nv12)
一般手机等移动端的数据流格式都是yuv格式,而神经网络的输入一般都是rgb格式,所以需要进行转换,这里给出c++的代码示例。文章来源:https://www.toymoban.com/news/detail-509482.html
cv::Mat bgr2yuv(cv::Mat &bgr)
{
cv::Mat img_yuv_yv12;
int height = bgr.rows;
int width = bgr.cols;
cv::Mat img_yuv(height * 3 / 2, width, CV_8UC1);
cv::cvtColor(bgr, img_yuv_yv12, CV_BGR2YUV_YV12);
memcpy(img_yuv.data, img_yuv_yv12.data, height * width);
char *v = (char*)img_yuv_yv12.data + height * width;
char *u = v + height * width / 4;
char *dst = (char*)im文章来源地址https://www.toymoban.com/news/detail-509482.html
到了这里,关于yuv数据(nv12和nv21)和RGB数据之间转换的c++代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!