diff --git a/modules/core/src/gpu_mat.cpp b/modules/core/src/gpu_mat.cpp index 1bbcb843df27f81fa59bf3198c1c2570761cdb57..a2e8da65a8510f849e40079a7b587ce3beca403e 100644 --- a/modules/core/src/gpu_mat.cpp +++ b/modules/core/src/gpu_mat.cpp @@ -678,11 +678,17 @@ void cv::gpu::GpuMat::create(int _rows, int _cols, int _type) size_t esz = elemSize(); void* devPtr; - cudaSafeCall( cudaMallocPitch(&devPtr, &step, esz * cols, rows) ); - // Single row must be continuous - if (rows == 1) + if (rows > 1 && cols > 1) + { + cudaSafeCall( cudaMallocPitch(&devPtr, &step, esz * cols, rows) ); + } + else + { + // Single row or single column must be continuous + cudaSafeCall( cudaMalloc(&devPtr, esz * cols * rows) ); step = esz * cols; + } if (esz * cols == step) flags |= Mat::CONTINUOUS_FLAG;