图像的width和 pitch

单位不同,width是像素,pitch是字节。
以一张640*480的每个像素点为24位(3字节)颜色的图为例:

width:表示图片的逻辑宽度,在这里就是640,这个值与色深无关及其他都无关,你所见的宽度就是它的值

pitch:表示图片中一行数据所占的字节数,多部分情况下为了高效处理,会将每行图像都对齐存储,

因为图片宽度是640,每个像素是3个字节数据,那么一行数据就是640*3


 

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、付费专栏及课程。

余额充值