When used properly, there shouldn't be any overhead in performance. But, they aren't exactly zero-overhead compared to raw arrays.
A typical std::vector container will use 3 pointers. Since you probably already track width and height yourself, your raw array could be done in one pointer since you already know the size.
You will incur some overhead when allocating the memory for the std::vector. However, this is the same overhead you incur if you allocate your own memory.
std::vector will actually zero-init your memory when using resize(), which may or may not be significant to what you're doing.
But, from a performance standpoint, accessing a std::vector is the same as accessing an array.