//roi图像做差用,tempimage3=roi图像
//glob_buffer8,直接从相机取出的图像,很实时,与roi图像tempimage3有时间差。
if (tempImage3 == null) return;
_RoiW = Convert.ToInt32(textBoxW.Text);
int mod = _RoiW % 4;//解决四位对齐问题20150716
_RoiW = _RoiW + (4 - mod) % 4;
_RoiH = Convert.ToInt32(textBoxH.Text);
_RoiX = Convert.ToInt32(textBoxX.Text);
_RoiY = Convert.ToInt32(textBoxY.Text);
byte[] first = new byte[_RoiW * _RoiH];
int W = pictureBox1.Image.Width;
for (int i = 0; i < _RoiH; i++)
for (int j = 0; j < _RoiW; j++)
{
try
{//头一帧图像
first[i * _RoiW + j] = glob_buffer8[((i + _RoiY) * W + j + _RoiX)];
}
catch (Exception ee)
{ return; }
}
byte[] sec = new byte[_RoiW * _RoiH];
if (tempImage3 == null) return;
for (int i = 0; i < _RoiH; i++)
for (int j = 0; j < _RoiW; j++)
{
try
{
int temp = i * _RoiW + j;
sec[temp] = tempImage3[temp];//第二帧图像
int cha = Math.Abs(sec[temp] - first[temp]);//差图像
sec[temp] = (cha < 18) ? (byte)cha : (byte)255;
}
catch (Exception ee)
{ return; }
}
///
///
//ROI圖像梯度處理
int[,] 差分图像x = new int[_RoiH, _RoiW];
int[,] 差分图像y = new int[_RoiH, _RoiW];
int[,] 梯度图像 = new int[_RoiH, _RoiW];
for (int i = 0; i < (_RoiH - 1); i++)
{
for (int j = 0; j < (_RoiW - 1); j++)
{
int n0 = (i * _RoiW + j);
差分图像x[i, j] = Math.Abs(sec[n0] - sec[n0 + 1]);
差分图像y[i, j] = Math.Abs(sec[n0] - sec[n0 + _RoiW]);
}
}
for (int i = 0; i < _RoiH - 1; i++)
{
for (int j = 0; j < _RoiW - 1; j++)
{
梯度图像[i, j] = 差分图像x[i, j] + 差分图像y[i, j];
梯度图像[i, j] = 梯度图像[i, j] > 255 ? 255 : 梯度图像[i, j];
}
}
for (int i = 0; i < _RoiW; i++)
{
梯度图像[0, i] = 0;
梯度图像[_RoiH - 1, i] = 0;
}
for (int j = 0; j < _RoiH; j++)
{
梯度图像[j, 0] = 0;
梯度图像[j, _RoiW - 1] = 0;
}
//求和梯度图
long msum = 0;
for (int j = 0; j < _RoiH; j++)
for (int i = 0; i < _RoiW; i++)
{
msum += 梯度图像[j, i];//梯度和计算
}
textBox3动静计量.Text = (msum / 1000).ToString();//大于门槛值显示出来。
if (msum / 1000 > 500)
{ pictureBox4.Image = cutPic24; }