gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:40:08 27 4
gpt4 key购买 nike

BitmapConverter.cs包括功能

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

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

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

看这张图(来自 opencv GitHub 上的 darkdragon-001 的问题 here )我不明白为什么上面的行让我们得到图像大小?

explanatory image from GitHub

最佳答案

为了更好地理解这一点,我们需要更多的上下文:

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

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

这些语句仅在以下情况下执行:
  • sstep == dstep -- 源和目标的步长(内存中两个连续行之间的偏移量)相同
  • !submat -- 源图像不是子矩阵(意味着它是完整图像,不是更大图像的 View ,因此是 data == datastart )。
  • continuous -- 源矩阵是连续的(行之间没有填充)。

  • 总而言之,它仅在底层像素阵列是来自 datastart 的一个连续内存块时运行。至 dataend .

    因此该表达式计算两个指针之间的字节数 src.Datasrc.DataEnd .

    关于opencv - 为什么这是 OpenCVSharp 中的图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46080353/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com