将每像素2字节的MONO-16位图像转换为MONO-16位,C#

时间:2015-08-10 09:51:34

标签: c# .net image-processing emgucv

我在C#工作,我有一个单色相机给我两个连续的图像。我想减去这些图像。

相机设置为MONO-16,分辨率为1980x960。

相机向我返回2457600个元素的向量,因为每个像素由两个字节表示,因此{1980x960 = 1228800} * 2 bytes / pixel = 2457600

问题是我必须将两个2457600元素向量转换为两个1228800向量才能进行减法。

所以我需要将2457600的两个连续元素组合成一个元素,这样我最终得到一个1228800元素的向量,其元素的范围为16bit(0-65536)。

我可能需要创建一个循环来迭代1228800次,并且在每次迭代中从2457600向量中获取两个元素:

  for(int i = 0 ; i < 2457600 ; i = i + 2)
  {
     byte BYTE1 = newGrabResultInternal2.ImageData.Buffer[i];
     byte BYTE2 = newGrabResultInternal2.ImageData.Buffer[i+1];        
     // What to do next to combine the 2 bytes into one???
  }

当我有两个代表1个像素的字节时,我如何将它们组合在一起给我一个16位深度的强度值(0-65536)?

此外,如果您可以提出不同的方法,那将会有所帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用位操作:

for(int i=0;i<2457600;i=i+2)
{
  byte BYTE1 = newGrabResultInternal2.ImageData.Buffer[i];
  byte BYTE2 = newGrabResultInternal2.ImageData.Buffer[i+1];        

   int pixel = ((int)BYTE1 << 8) | ((int)BYTE2);
 }

这会将BYTE1 8位向左移,然后将其与BYTE2合并。

这会使BYTE1为较高字节,BYTE2为较低字节。如果你想要它,你需要交换它们。