为什么这是OpenCVSharp中的图像大小

时间:2017-09-06 16:36:38

标签: opencv opencvsharp

BitmapConverter.cs包含函数

public static unsafe void ToBitmap(this Mat src, Bitmap dst)

稍后(第403行)我们有这个片段:

uint imageSize = (uint)(src.DataEnd.ToInt64() - src.Data.ToInt64());

查看此图表(来自opencv GitHub here上的darkdragon-001问题)我无法理解为什么上面的行会为我们提供图像大小?

explanatory image from GitHub

1 个答案:

答案 0 :(得分:1)

为了更好地理解这一点,我们需要更多背景信息:

// ....
if (sstep == dstep && !submat && continuous)
{
    uint imageSize = (uint)(src.DataEnd.ToInt64() - src.Data.ToInt64());
    MemoryHelper.CopyMemory(pDst, pSrc, imageSize);
}
// ...

好的,这是处理复制包含像素数据的原始内存的代码。

这些陈述仅在以下情况下执行:

  • sstep == dstep - 步长(内存中两个连续行之间的偏移量)对于源和目标是相同的
  • !submat - 源图像不是子矩阵(意味着它是一个完整的图像,而不是一个更大的图像,因此data == datastart)。
  • continuous - 源矩阵是连续的(行之间没有填充)。

总而言之,它仅在基础像素数组是从datastartdataend的一个连续内存块时运行。

这样表达式计算两个指针src.Datasrc.DataEnd之间的字节数。