2015-04-12 3 views
0

Я пытаюсь прочитать видео с веб-камеры и обработать его на CUDA. Перед этим кадр должен быть преобразован в массив 1D, но когда я использую изображение Mat :: data, оно выглядит поврежденным (все, что я вижу, это серый серый беспорядок). imShow с тем же Mat отлично работает.OpenCV - Mat.data поврежден после VideoCapture

captureA >> A; 

    cvtColor(A, A, CV_BGR2GRAY); 

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

    imshow("A", texture); 

Любые идеи?

+0

ли ваш 'init_texture()' требует, чтобы входные данные должны быть память непрерывно? – herohuyongtao

+0

Да - вход затем копируется в память gpu cudaMemcpyToArray – dannyZ

ответ

0

Поскольку cudaMemcpyToArray() в пределах init_texture() требует, чтобы память входных данных была непрерывной, вы должны убедиться в этом, прежде чем звонить.

В вашем случае, это может быть так:

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]); 
} 
+0

Проблема в том, что мат A является непрерывным. Он выглядит так же, как A.data указывает на другое место. Все остальные операции, такие как изменение размера, cvtColor или даже копирование в GpuMat, отлично работают. – dannyZ

Смежные вопросы