Проблемы с разрешением захвата веб-камеры - PullRequest
0 голосов
/ 12 января 2010

Я делаю свое приложение для веб-камеры, но у меня проблемы с некоторыми веб-камерами. Тот, в частности, рекламирует, что он может делать 5-мегапиксельные фотографии, но он работает с собственным разрешением 320x240 (или что-то ужасное), что является источником, который я получаю.

Я использую код, который, кажется, хорошо скопирован и вставлен в сеть, воплощение, которое я использую для доступа к веб-камере, здесь http://www.planet -source-code.com / VB / скрипты / ShowCode.asp? TxtCodeId = 1339 & lngWId = 10 и использует avicap32 для доступа к веб-камере, вызов выглядит следующим образом

mCapHwnd = capCreateCaptureWindowA("WebCap", 0, 0, 0, m_Width, m_Height, this.Handle.ToInt32(), 0);
SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0);
SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0);

Я тестировал с двумя другими веб-камерами (одна встроена в мой ноутбук, одна старая, с которой я работал), и обе из них, похоже, получили респектабельное разрешение.

Я изменил код Webcam_Capture, чтобы попытаться сделать смешное изображение с высоким разрешением

//private int m_Width = 320;
//private int m_Height = 240;
private int m_Width = 1600;
private int m_Height = 1200;
//private int m_Width = 3200;
//private int m_Height = 2400;

с использованием нескольких разных разрешений, как показано выше.

Моя интуиция говорит мне, что мне нужно что-то сделать, чтобы веб-камера использовала другое разрешение, поскольку она по умолчанию имеет какое-то значение.

Мысли

Я был бы рад опубликовать больше кода, который я использую, но это, кажется, основа этого. WM_SET_PREVIEW может потребоваться некоторое объяснение, это константа API.

public const int WM_CAP_CONNECT = 1034;
public const int WM_CAP_DISCONNECT = 1035;
public const int WM_CAP_GET_FRAME = 1084;
public const int WM_CAP_COPY = 1054;
public const int WM_CAP_START = WM_USER;
public const int WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41;
public const int WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42;
public const int WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43;
public const int WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44;
public const int WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45;
public const int WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46;
public const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50;

Любые идеи приветствуются! robg

1 Ответ

0 голосов
/ 29 июля 2013

Не было показано ни одного кода для настройки камеры. Поэтому может быть применено низкое разрешение по умолчанию. Идеи:

  1. Чтобы не использовать Video for Windows - API устарел, ограничен и не является гибким программно. В любом случае, сообщение WM_CAP_SET_VIDEOFORMAT установит веб-камеру и изменит разрешение. Попробуйте вместо этого использовать DirectShow или Media Foundation.

  2. Windows SDK предоставляет вам инструмент GraphEdit, где вы можете интерактивно создавать конвейер захвата и, в частности, проверять доступные разрешения.

  3. Проверьте спецификацию камеры: 5-мегапиксельная съемка не означает, что это разрешение доступно для потокового видео. Разрешение видео может составлять 1/4 от этого, однако оно должно быть лучше, чем 320x240.

...