We consider optical computers that encode data using images and compute by transforming such images. We give an overview of a number of such optical computing architectures, including descriptions of the type of hardware commonly used in optical computing, as well as some of the computational efficiencies of optical devices. We go on to discuss optical computing from the point of view of computational complexity theory, with the aim of putting some old, and some very recent, results in context. Finally, we focus on a particular optical model of computation called the continuous space machine. We describe some results for this model including characterisations in terms of well-known complexity classes.