【问题标题】:OpenCV - Mat.data corrupted after VideoCaptureOpenCV - 视频捕获后 Mat.data 损坏
【发布时间】:2015-04-12 14:16:10
【问题描述】:

我正在尝试从网络摄像头读取视频,并在 CUDA 上对其进行处理。在此之前必须将帧转换为一维数组,但是当我使用 Mat::data 时,图像似乎已损坏(我所看到的只是一些灰色的混乱)。使用相同 Mat 的 imShow 可以正常工作。

    captureA >> A;

    cvtColor(A, A, CV_BGR2GRAY);

    init_texture(A.data);
    lawTex(450, 375, texture);

    imshow("A", texture);

有什么想法吗?

【问题讨论】:

  • 您的init_texture() 是否要求输入数据必须是内存连续的?
  • 是 - 然后输入被 cudaMemcpyToArray 复制到 gpu 内存中

标签: opencv webcam mat


【解决方案1】:

由于init_texture() 中的cudaMemcpyToArray() 要求输入数据内存是连续的,因此在调用之前应确保这一点。

对于你的情况,可以是这样的:

if (A.isContinuous()){
    init_texture(A.data);
}
else{ // not continuous, transfer first
    std::vector<uchar> data;
    data.assign(A.datastart, A.dataend);

    init_texture(&data[0]);
}

【讨论】:

  • 问题是mat A是连续的。它看起来就像 A.data 指向其他地方。所有其他操作,例如调整大小、cvtColor,甚至复制到 GpuMat 都可以正常工作。
猜你喜欢
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 2021-01-02
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 2016-08-19
相关资源
最近更新 更多