You plug a mono USB camera into a Windows PC. The device chimes, shows up in Device Manager, and the Camera app gives you a black frame or does not list the camera at all. The hardware is almost certainly fine: generic Windows applications render through Media Foundation, and that pipeline displays YUV and RGB pixel formats only. A machine-vision camera that streams Mono8, or raw Bayer and nothing else, has nothing those apps can decode. This explainer is for anyone commissioning an inspection station who reached for a built-in Windows app as a quick sanity check. You will see how Windows reaches a camera, where the format gate sits, which cameras pass it, what to open instead when yours does not, and the bus arithmetic that tells you whether a converted preview is worth the bytes.
The short answer
The Windows Camera app, the Control Panel preview and every other Media Foundation application display YUV and RGB formats. Mono8 and raw Bayer are not supported on that path. A mono USB camera that offers only Mono formats therefore has no format to negotiate: the app shows black, or skips the device entirely. Nothing is wrong with the camera.
The decision has two branches:
- If the viewer is your vision software, open the camera through its GenTL producer or DirectShow driver and request Mono8. That path always works and carries 1 byte per pixel.
- If the viewer must be a generic Windows app, the camera has to expose YUY2 or RGB24 through its driver. Modern industrial camera stacks usually do not, so change the application, not the camera.
How Windows applications reach a camera
Consumer Windows applications do not talk to cameras directly. They call Media Foundation, Media Foundation works with kernel-mode camera drivers, and Windows provides the bridge between the two. The in-box UVC class driver is one of those kernel camera drivers, which is why a consumer webcam, a device whose whole job is YUY2, NV12 or MJPEG, previews with no vendor software installed.
Industrial stacks sit in user mode. A vendor DirectShow driver or a GenTL producer is a library that an application loads and talks to directly; it never registers on the Media Foundation path. Applications that load it see every format the sensor produces, Mono8 and raw Bayer included. Applications that only know Media Foundation never ask. That split is why the same camera appears in your vision tool and nowhere else, and which enumeration API each application uses tells you which side of the split you are on.
The format gate: YUV and RGB only
The Media Foundation camera pipeline hands applications YUV and RGB. Microsoft's recommended 8-bit YUV formats for video rendering are the formats preview paths are built around; mono and Bayer are not among them. Consumer webcams sidestep size limits with compressed MJPEG, which decodes to YUV before rendering. Machine-vision cameras rarely offer compression, because it destroys the raw pixel values your inspection depends on.
What each stream costs, and who will take it:
| Stream | Bytes per pixel | Who displays it |
|---|---|---|
| Mono8 | 1 | Vision applications via GenTL or DirectShow |
| Bayer raw | 1 | Applications that debayer |
| NV12 | 1.5 | Media Foundation apps |
| YUY2 | 2 | Media Foundation apps |
| RGB24 | 3 | Media Foundation apps and most viewers |
One more trap sits inside the YUV route. YUV luminance historically used the studio range, holding values from 16 to 235 rather than 0 to 255, and Media Foundation supported only that range before Windows 8.1. Grey codes below 16 and above 235 clip on the way through, so a converted preview is for aiming the camera, not for judging levels.
Which cameras pass the gate, and which do not
Three cases cover nearly every USB camera that appears as a capture device:
- A mono camera offering only Mono formats has no compatible format for Media Foundation. The Camera app and the Control Panel preview show nothing. This is the classic "dead on arrival" that is not.
- A color camera offering YUY2 or RGB24 alongside Bayer lets the generic app pick the converted format and preview normally. If stakeholders must see a stream without installing vision software, this is the only case that works.
- A color camera offering only Bayer fails the same way as mono. The sensor has chroma, but the app cannot debayer.
GigE Vision and USB3 Vision cameras are a fourth case: they are not UVC devices, so without a vendor bridge they never appear in a generic app regardless of format, a different failure with the same symptom. On the vision side, the first thing to check is the GigE pixel-format default, because a wrong default there produces its own missing-color complaints.
Worked example: previewing a 6 MP mono USB3 camera
Inputs. The camera is a 6 MP USB3.0 area scan camera with a mono sensor and a 1/1.8" rolling shutter, the shape sold under our USB3 area scan series. The goal is a live full-sensor preview on a Windows PC while focusing the lens, run at 25 fps. The viewer candidates are the Camera app and a GenTL-based vision tool.
Rule. Media Foundation needs YUY2 or RGB24; the vision tool takes Mono8. Bytes per second follow the formula above: width × height × bytes per pixel × frame rate.
Arithmetic. A 6 MP sensor is, to a close estimate, six million pixels:
- Mono8: 6,000,000 px × 1 B/px = 6 MB per frame. At 25 fps that is 6 MB × 25 = 150 MB/s.
- YUY2: 6,000,000 px × 2 B/px = 12 MB per frame. At 25 fps that is 300 MB/s.
- RGB24: 6,000,000 px × 3 B/px = 18 MB per frame. At 25 fps that is 450 MB/s.
A USB 3.x Gen 1 link signals at 5 Gbps; after 8b/10b encoding that is 4 Gbps of payload, 500 MB/s in theory, less once protocol overhead and controller sharing take their cut. The YUY2 conversion at 300 MB/s fits with about 200 MB/s to spare on a dedicated controller, and it doubles the bus load to add zero information, because grey data needs one byte per pixel.
Decision. For a mono-only camera the bandwidth question never arrives: the Camera app has no format to negotiate, so it shows no image at any frame rate. Open the GenTL tool, request Mono8, and preview at full size on 150 MB/s. Debugging the generic app is wasted time; for a mono-only device that door does not exist. Keep the YUY2 arithmetic for the day a color camera must feed a generic app, and remember the doubling when you budget that wire.
The software that does show mono
Every path that works shares one property: the application asks for Mono8 by name.
- Your vision software loads the camera's GenTL producer or DirectShow driver, requests Mono8 and renders it directly.
- Your own code reads the Mono8 buffer and copies each byte into the red, green and blue channels of an RGB bitmap, a repack rather than a color conversion. When that image then misbehaves downstream, why a Mono8 image arrives as three channels covers the usual cause.
- The vendor's viewer ships with every industrial camera; keep one on the engineering laptop as the reference display.
- For color cameras that do appear in Media Foundation apps, setting exposure and white balance with Media Foundation controls what those apps can reach.
When the usual answer is wrong
Four look-alikes produce the same black frame without the mono cause:
- A color camera that offers YUY2 fails anyway because the app or driver defaulted to the Bayer stream. Recognizing what a Bayer raw stream from an RGB camera looks like settles it at a glance; a gray preview with wrong colors is the same negotiation failing partway.
- A depth camera shows a black-and-white picture because you opened the IR stream, which looks mono but is a stream-selection problem: you are on the IR stream, not the color one.
- The device lists as a generic USB video device and behaves oddly: a stale UVC device entry is the culprit, not the pixel format.
- Your own Media Foundation code fails with "no matching media type": that error is this same gate. Fix the stream setup rather than the camera.
Windows itself adds one asymmetry: the Camera app configures cameras more assertively than the Control Panel preview, so Camera-app-works-but-preview-does-not is a real, benign pattern, not evidence of a failing driver.
Checklist before you condemn the camera
Work through this list before an RMA or a driver purge:
- Open the camera in a GenTL or DirectShow application and request Mono8. If it renders, the station is healthy.
- In that application, list the camera's formats. If YUY2 and RGB24 are absent, no generic Windows app will ever display this camera, so stop debugging Windows.
- Check Device Manager for which stack the device is bound to, the in-box UVC driver or the vendor's user-mode driver. A recent update that moved stacks explains a preview that used to work.
- Try the Camera app after the Control Panel preview fails; its configuration is more assertive.
- If the machine's strobe or an IR illuminator runs during these tests, do not look into it: near-IR output looks dim to your eye while delivering full irradiance to your retina.
Choosing a camera for the software you actually have
Pick by who has to see the stream:
- Your vision software is the only viewer: any mono camera. Mono8 keeps the wire at 1 byte per pixel, and the area scan cameras finder filters by interface, sensor format and mount.
- Stakeholders must preview in generic Windows apps: choose a color camera whose driver exposes YUY2 or RGB24, and budget 2 or 3 bytes per pixel. For tight enclosures, the LS-BCM-0047, a 1.3 MP color USB3 board camera with a C-mount, is the shape of that choice.
- An embedded host runs your own application: the gate never applies, because your code decides the formats. A global-shutter USB3 module like the LS-BCM-0003 at 3.1 MP and 120 fps gives you the focusing preview inside your own UI, and the board-level cameras category collects both.
- Sensor format
- 1/2.7"
- Lens mount
- C-mount
- Sensor format
- 1/1.8"
- Lens mount
- C-mount
When two teams need the same camera, run the vision application as the source of truth and let it export snapshots for the humans; feeding a generic app live is the color camera's job, not a reason to compromise the inspection stream.
The camera finder narrows by interface and sensor format, the configurator walks camera, lens, light and controller in one pass, and more integration failures like this one sit under the cameras topic. If you cannot tell which driver stack your camera is on, contact us with the camera model and the application name; sorting that out takes minutes, not days.
问题
Why does my mono camera work in our vision software but not in the Windows Camera app?
Your vision software loads the camera's user-mode stack, a GenTL producer or a DirectShow driver, and asks for Mono8 by name. The Camera app and the Control Panel preview go through Media Foundation, which renders YUV and RGB and has no path to a user-mode industrial driver. These are two different doors, and the vision software simply uses the one the camera was designed for.
Will installing the vendor driver make a mono camera appear in the Camera app?
Only if that driver exposes a YUV or RGB format to Media Foundation. Older kernel-mode industrial drivers sometimes synthesized an RGB stream even for mono sensors, which is why previews that once worked disappear after an update to a user-mode GenTL or DirectShow stack. List the formats the driver actually exposes: if only Mono formats appear, no generic Windows app will display the camera.
Can I convert Mono8 to a viewable format myself?
Yes, in your own application. Read the Mono8 buffer and copy each byte into the red, green and blue channels of an RGB bitmap before display; that is a repack, not a color conversion. Avoid routing through YUY2 if you care about levels: the studio luma range holds values from 16 to 235, so grey codes below and above those limits clip on the way through.
Do Linux and macOS have the same limit?
Linux does not. A V4L2 client negotiates formats per device and can request mono formats directly, which is why the same USB camera a Windows generic app refuses streams fine on a Linux host. macOS behaves like Windows for consumer preview paths, so plan on a vendor-aware application there too.
Is a color camera the better pick when the stream must be viewed in generic Windows software?
Yes. A color sensor outputs Bayer, and color camera drivers commonly expose YUY2 or RGB24 alongside it, giving Media Foundation something to decode. Budget the bus accordingly: YUY2 carries 2 bytes per pixel and RGB24 carries 3, against 1 for Mono8. If the only viewer is your own vision software, stay with mono and keep the smaller stream.

