Вы правы, вы не можете использовать cvQueryFrame, который предназначен для камер, которые имеют специальные драйверы веб-камеры.Итак, похоже, что вы понимаете API для взаимодействия с камерой и извлечения данных из нее;все, что осталось сделать, - это преобразовать эти данные в IplImage, выполнить некоторую обработку, если хотите, отобразить изображение, если хотите, и циклически просмотреть кадры, которые вы получаете с желаемой частотой кадров.
Итак, изображения, которые вы получаете, они закодированы (например, в формате JPEG), или вы получаете значения пикселей (0-255, если 8 бит).Если данные изображения закодированы, вы должны будете знать, какой тип кодирования используется, и декодировать, используя тип библиотеки.Например, LibJPEG Turbo - это то, что я использую для декодирования данных JPEG с камер Nikon и Canon.
Предполагая, что вы расшифровали изображение, или изображение не закодировано, вам необходимо знать некоторые подробности об изображении.Высота и ширина в пикселях, глубина в битах (обычно 8 бит на пиксель) и количество каналов (3 для цвета RGB, 1 для оттенков серого).
Предположим, что размер изображения составляет 8 бит напиксель, имеет высоту h, ширину w и шкалу серого.
Начните с выделения памяти для нового изображения IplImage * frame = cvCreateImage (cvSize (w, h), 8, 1);
Затем в вашем цикле:
while(getImages) {
// obtain 1-D array of Row-Wise 8 bit pixel values from camera API and decoding if necessary
frame->imageData = pointer to pixel values
// process if you want
// display if you want
}
cvReleaseImage(&frame)
Убедитесь, что вы не перераспределяете память на каждой итерации цикла, просто сделайте это один раз, и будьте внимательны и освобождайте кадр до завершения программы