[FlyCapture2] Bumblebee XB3 Save Images。。。之【Bumblebee XB3分离图像代码】

具体内容参考:
链接: https://www.cnblogs.com/grandyang/p/4105725.html.

【说明】
系统:Ubuntu
语言:C++
相机SDK:FlyCapture2

这儿只上代码

int img_rows = img.GetRows();  // 输入的Image的行数 即是 图像的高h
int img_cols = img.GetCols();      // 输入的Image的列数 即是 图像的宽w
unsigned int databuffer = img_cols * img_rows;

unsigned char *Left = new unsigned char[databuffer*3];
unsigned char *Mid = new unsigned char[databuffer*3];
unsigned char *Right = new unsigned char[databuffer*3];

// 定义新的左中右的Image类型 用于存放 分离后的img
Image Temp_left;
Image Temp_mid;
Image Temp_right;
    
unsigned char *data = img.GetData();
for ( int l = 0; l < databuffer; l++ )
{
   // R
   Left[3*l] = *data;  // L' R
    
   ++data; // R->G
 
   Mid[3*l]  = *data;   // M' R
   
   ++data; // G->B
   
   Right[3*l] = *data;  // R' R

   ++data; // B->R

} 
    
unsigned char *data2 = img.GetData();
for ( int l = 0; l < databuffer; l++ )
{
   // R
   Left[3*l+1] = *data2;  // L' G
   
   ++data2; // R->G
   // if(data) { cout << "3l+1 " << 3l+1 << endl; break;}

   Mid[3*l+1]  = *data2;   // M' G
   
   ++data2; // G->B
   
   Right[3*l+1] = *data2;  // R' G

   ++data2; // B->R

}

unsigned char *data3 = img.GetData();
for ( int l = 0; l < databuffer; l++ )
{
   // R
   Left[3*l+2] = *data3;  // L' B
   
   ++data3; // R->G
 
   Mid[3*l+2]  = *data3;   // M' B
   
   ++data3; // G->B
   // if(data3) break;
   Right[3*l+2] = *data3;  // R' B

   ++data3; // B->R
}

嗯。。 这儿你可以写的更简洁一点!
整段代码是对链接文章中“ FlyCapture2中Image类中的数据是以unsigned char类型保存的,而且是按左中右分别存的,我们只需每三个拆分出来分别保存到新的Image变量中,可参见如下pseudo-code:” 这一段文字下方伪代码的实现。其余剩下的都好弄了。

Tips:众所周知单通道的是灰度图,如三通道是灰度图,那RGB三个值是一个数的。
效果图:
在这里插入图片描述
Left
在这里插入图片描述
在这里插入图片描述不是很明显看不出哪个是左中右,反正分出来了最后。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值