OpenCV垫损坏

Posted

技术标签:

【中文标题】OpenCV垫损坏【英文标题】:OpenCV Mat corruption 【发布时间】:2016-08-05 01:56:38 【问题描述】:

我一直在开发一个简单的基于 IP 的视频程序,部分用于项目,部分用于自学一些使用高级接口的网络基础知识。问题是我可以通过网络从cv::Mat 发送数据就好了,但是一旦我尝试解码数据,它似乎丢失了很多颜色数据。代码在这个gist 中,其中包含在Linux 下构建和运行项目所需的所有文件。任何人都可以对此有所了解吗?

如果您需要更多信息,请告诉我。恐怕你需要一个网络摄像头来测试。

【问题讨论】:

【参考方案1】:

当您使用 memcpy(m.data(), frame.data, frame.rows * frame.cols); 复制数据时,您只复制了总数据的三分之一,因为您的图像是 3 通道图像。

尝试将其更改为memcpy(m.data(), frame.data, 3 * frame.rows * frame.cols);(并在之前分配足够的空间)。

【讨论】:

谢谢!这解决了问题,果然颜色数据只是部分复制到客户端。我确实让它只适用于您的更改,并且显示了颜色,但偏斜。从客户端的Mat 构造函数中删除vmetadata.cvstep 然后显示正确的图像。

以上是关于OpenCV垫损坏的主要内容,如果未能解决你的问题,请参考以下文章

如何在opencv中更改实验室垫中的像素

OpenCV - 创建一个垫对象数组

java glReadpixels 到 OpenCV 垫

OpenCV 填充垫,与 VideoWriter 一起使用

如何在 OpenCV 中使用高斯过滤单列垫

OpenCv c++ 为基本打印垫功能创建一个 C 包装器?