Color space that your camera returns data in is not RGB i think so. This is a common issue for many webcams. The commands commonly used to display images such as image or imshow expect RGB data. If you pass in YCbCr (or YUV) data, the result is an image that looks vaguely correct but has a pink and green hue to it.
There are a number of ways to work around this, but in your case, I suspect that the easiest will be to change the ReturnedColorSpace property of the videoinput object:
vid = videoinput('winvideo', 1); set(vid, 'ReturnedColorSpace', 'RGB'); img = getsnapshot(vid); imshow(img)