首页 > 其他分享 >将BGR转换成为YUV420SP图像格式

将BGR转换成为YUV420SP图像格式

时间:2024-04-02 14:23:20浏览次数:23  
标签:图像格式 img int YUV420SP unsigned height char width BGR

 

 

//BGR2YUV(YUV420SP_NV21)
void enCodeYUV420SP(unsigned  char* yuv420sp, unsigned char* rgb, int width, int height)
{
	if (yuv420sp == NULL || rgb == NULL)
		return;
	int frameSize = width*height;
	int yIndex = 0;
	int uvIndex = frameSize;
 
	int R, G, B, Y, U, V;
	for (int i = 0; i < height; i++)
	{
		for (int j = 0; j < width; j++)
		{
			B = rgb[(i * width + j) * 3 + 0];
			G = rgb[(i * width + j) * 3 + 1];
			R = rgb[(i * width + j) * 3 + 2];
 
			//RGB to YUV
			Y = ((66 * R + 129 * G + 25 * B + 128) >> 8) + 16;
			U = ((-38 * R - 74 * G + 112 * B + 128) >> 8) + 128;
			V = ((112 * R - 94 * G - 18 * B + 128) >> 8) + 128;
 
			yuv420sp[yIndex++] = (unsigned char)((Y < 0) ? 0 : ((Y > 255) ? 255 : Y));
			if (i % 2 == 0 && j % 2 == 0)
			{
				yuv420sp[uvIndex++] = (unsigned char)((V < 0) ? 0 : ((V > 255) ? 255 : V));//UV交替排列
				yuv420sp[uvIndex++] = (unsigned char)((U < 0) ? 0 : ((U > 255) ? 255 : U));
			}
		}
	}
}
 

 

 cv::Mat img = cv::imread(imgPath);
		
 
		int height = img.rows;
		int width = img.cols;
	 
		unsigned char* img_bgr_data = (unsigned char*)malloc(height*width * 3 * sizeof(unsigned char));
		for (int i = 0; i < height; i++)
		{
			unsigned char* current_row = img.ptr<uchar>(i);
			for (int j = 0; j < width; j++)
			{
				img_bgr_data[(i * width + j) * 3 + 0] = current_row[j * 3 + 0];//B
				img_bgr_data[(i * width + j) * 3 + 1] = current_row[j * 3 + 1];//G
				img_bgr_data[(i * width + j) * 3 + 2] = current_row[j * 3 + 2];//R
			}
		}
	 
		//RGB->NV21(YUV420SP)
		unsigned char* img_nv21_data = (unsigned char*)malloc(height*width * 3 / 2 * sizeof(unsigned char));
		
		

		
		enCodeYUV420SP(img_nv21_data, img_bgr_data, width, height);
//Mat img_BGR(height, width, CV_8UC3);
		//cvtColor(img_nv21, img_BGR, CV_YUV2BGR_NV21);//YUV420sp->BGR
		//cv::cvtColor(img_nv21, img_BGR, cv::COLOR_YUV420sp2BGR);
		//cv::imwrite("./img_BGR.jpg", img_BGR);		

  

 

标签:图像格式,img,int,YUV420SP,unsigned,height,char,width,BGR
From: https://www.cnblogs.com/shuimuqingyang/p/18110480

相关文章

  • kbgress之数据结构设计
    前言自2024年2月17日至今,已经过去一个月时间,这场突如其来的重感冒使我难以招架,现在仍然有一点症状未消除,甚是难受。十多年没有患如此严重的感冒了,大家都说此次流感其实是新冠引发,也不知道真假,医生说是病毒性感冒,并没有说新冠二字,也有可能担心增加患者的心理负担,即便是新冠又能如......
  • BGRL论文阅读笔记
    BGRL论文阅读笔记Abstract​ 自监督学习提供了一个有前途的途径来消除昂贵的标签信息的需要。然而,为了实现最先进的性能,方法通常需要大量的负的例子,并依赖于复杂的扩充。这可能会非常昂贵,特别是对于大型图形。为了解决这些挑战,我们引入了BootstrappedGraphLatent(BGRL)——一种......
  • 学习unigui【23】uniDBGrid的使用摘要
    Unidbgrid自动调整列宽UniDBGrid1->ClientEvents->ExtEvents[Ext.data.Store[store]]addstore.loadfn:functionstore.load(sender,records,successful,eOpts){sender.grid.columnManager.columns.forEach(function(col){col.autoSize()})}UniDBGrid1.......
  • 提供[vCPE]BCM88312BA0KF12G芯片,BCM6816IFSB[GPON SOC],BCM6802FKFSBGR MoCA 2.0以太网
    1、BCM88312是一种集成化可编程设备,可实现与运营商网络的无缝对接,以提供vCPE服务。BCM88312基于博通的OpenFlow-DataPlaneAbstraction(OF-DPA)层框架,通过OpenFlow进行管理,从而将OF-DPA从基础架构内核一直扩展至企业CPE接入。器件:BCM88312BA0KF12G类型:vCPE芯片封装:BGA主要特性•......
  • UniDBGrid 多行标题显示
    UniDBGrid多行标题显示单行标题显示样式:如果想让UniDBGrid多行标题显示,可以如下设置:效果如下:如果再多行,则可以用分隔符(默认是;)分割。......
  • 学习unigui【19】unidbgrid的Group By This Field汉化
    上面已经将groupbythisfield汉化。由于版本的不断更新,不可避免有汉化遗漏。那么说到如何汉化问题。 根据ExtJSVersion查找你电脑响应目录文件D:\ProgramFiles(x86)\FMSoft\Framework\uniGUI\ext-7.5.1\build\classic\locale\locale-zh_CN.js(主要是该文件)D:\ProgramFi......
  • 学习unigui unidbgrid的GridsGroupingSorting【18】
    折腾一天,你不按照demo里的代码来,就是没有效果。procedureTUniGridsGroupingSorting.UniDBGrid1MultiColumnSort(Columns:TUniDBGridColumnArr;Directions:TUniSortDirections);varOrderStr:string;I:Integer;beginUniMainModule.ADOQuery5.Close;//必须在......
  • TUniDBGrid控件之Summary例子
    TUniDBGrid控件之Summary例子(记录一下,方便以后备查)在这个例子中,主要用到TUniDBGrid、TClientDataSet和TDataSource三个控件。本文除去介绍使用TUniDBGrid控件之Summary外,TClientDataSet使用FieldDefs用于自定义的字段名表(即:不使用dataprovider)参考:Delphi中ClientDataSet的用......
  • 无涯教程-Redis - BGREWRITEAOF 命令函数
    RedisBGREWRITEAOF命令指示Redis启动仅追加文件重写过程,重写将创建当前"仅附加文件"的小型优化版本,如果BGREWRITEAOF失败,则不会丢失任何数据,因为旧的AOF将保持不变,如果还没有后台进程进行持久化,则重写将仅由Redis触发。BGREWRITEAOF-语法以下是RedisBGREWRITEAOF命令的......
  • TDBGridEh表格 lookupParams 使用
    客户的:cdsCustomer:TclientDataSet的CommandText为下的,中包含了DepartmentID部门ID,这里不用关联Department表的DepartmentID字段CommandText:='selecttop10CustomerID,Code,Customer,DepartmentIDfromCustomer'; 客户显示的表格如下设置Grideh1.columns[2].FieldName......