图像Width和Pitch

在图像数据传输和显示的过程中有一个不常用的参数:间距(pitch)。
    它有很多的别名,在使用d3d显示的时候,它叫pitch;在用ffmpeg解码的时候,它叫linesize;在用ffmpeg转换格式的时候,它叫stride。统一以间距来表示。
    这个参数看起来似乎没什么用,因为它的值和图像的宽度一样。但是那是大多数情况下,一旦遇到它和宽度不一样的时候,如果你不了解它的含义,那么程序肯定要出问题。可是为什么有时候它等于宽度,有时候又不等于呢?这就和它的含义有关了。
我们都知道现在计算机的cpu都是32位或者64位的cpu,他们一次最少读取4、8个字节,如果少于这些,反而要做一些额外的工作,会花更长的时间。所有会有一个概念叫做内存对齐,将结构体的长度设为4、8的倍数。
    间距也是因为同样的理由出现的。因为图像的操作通常按行操作的,如果图像的所有数据都紧密排列,那么会发生非常多次的读取非对齐内存。会影响效率。而图像的处理本就是一个分秒必争的操作,所以为了性能的提高就引入了间距这个概念。
    间距就是指图像中的一行图像数据所占的存储空间的长度,它是一个大于等于图像宽度的内存对齐的长度。这样每次以行为基准读取数据的时候就能内存对齐,虽然可能会有一点内存浪费,但是在内存充裕的今天已经无所谓了。

详细链接:https://blog.csdn.net/hulingerlin/article/details/82120552

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nvdsinfertensormeta是NVIDIA DeepStream SDK中的一个功能模块,用于处理图像检测和推理。它可以将图像输入传递给深度学习模型进行处理,并返回处理后的结果。 而图像保存是指将图像数据保存到内存或存储设备中,以备后续使用或传输。 在将nvdsinfertensormeta换成图像保存时,我们需要修改代码以实现这个功能。首先,我们需要将图像数据从输入中提取出来,这可以通过调用nvds_frame_meta_get_frame_source_id函数来实现。然后,我们可以使用OpenCV或其他图像处理库将图像保存到磁盘或内存中。 具体而言,修改的代码如下: ``` NvDsFrameMeta* frameMeta = nvds_acquire_frame_meta_from_pool(batch_meta); NvDsBatchMeta* batchMeta = (NvDsBatchMeta*) (batch_meta->NvDsBatchMeta); for (NvDsMetaList* lFrame = frameMeta->frame_meta_list; lFrame; lFrame = lFrame->next) { NvDsFrameMeta* currentFrameMeta = (NvDsFrameMeta*) (lFrame->data); guint frameSourceId = currentFrameMeta->source_id; // 获取图像数据 NvBufSurface* surface = (NvBufSurface*) (currentFrameMeta->input_batch->surfaceList[frameSourceId].surfaceList[0]); cv::Mat image(surface->surfaceList[frameSourceId].planeParams.height[0], surface->surfaceList[frameSourceId].planeParams.width[0], CV_8UC3, surface->surfaceList[frameSourceId].mappedAddr.addr[0], surface->surfaceList[frameSourceId].planeParams.pitch[0]); // 图像保存 std::string filename = "frame_" + std::to_string(frameSourceId) + ".jpg"; cv::imwrite(filename, image); } // 这里是其他处理代码,例如将图像推送到消息队列或发送给其他模块 nvds_add_frame_meta_to_frame_batch(batch_meta, frameMeta); ``` 这样,我们就可以实现将检测和推理后的图像保存到磁盘或内存中,并进行后续处理。请注意,上述代码示例中使用了OpenCV来保存图像,你也可以使用其他库或自定义功能来实现图像保存函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值