Форум программистов, компьютерный форум, киберфорум
C++: OpenCV
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/111: Рейтинг темы: голосов - 111, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 20.09.2011
Сообщений: 21

OpenCV запись видео с камеры

29.07.2021, 07:32. Показов 21875. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В кратце что имеем: Raspberry PI4 + Raspbian buster, gcc8.3, opencv 4.5.0. написан следующий код для сохранения видео с камеры на флеш, но создается файл и все, дальше в него запись не происходит. Установил ffmpeg с кучей библиотек, не помогло
.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "opencv2/opencv.hpp"
#include <iostream>
 
using namespace std;
using namespace cv;
 
int main(){
    VideoCapture cap(0);   //, CAP_DSHOW);
    cap.set(CAP_PROP_FRAME_WIDTH, 640);
    cap.set(CAP_PROP_FRAME_HEIGHT, 480);
    if(!cap.isOpened()){
        cout << "Error opening video stream" << endl;
        return -1;
    }
    int frame_width = cap.get(cv::CAP_PROP_FRAME_WIDTH);
    int frame_height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);
    VideoWriter video("outcpp.avi", cv::VideoWriter::fourcc('M','J','P','G'), 20, Size(frame_width,frame_height));
    while(1){
        Mat frame;
        cap.read(frame);
        if (frame.empty()) break;
        video.write(frame);
        imshow( "Frame", frame );
        char c = (char)waitKey(1);
        if( c == 27 ) break;
    }
    cap.release();
    video.release();
    destroyAllWindows();
    return 0;
}
в чем еще может быть проблема, пробовал то же самое сделать на Python эффект тот же.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.07.2021, 07:32
Ответы с готовыми решениями:

Захват видео с камеры. OpenCV
Добрый вечер, форумчане. Возникла проблема с захватом видео. Применяю библиотеку openCV 2.1. С одной камеры (USB) захват видео проходит...

OpenCV 2.4 запись видео. Класс. Подправить чтобы отображалась картинка из файла
/************************************************************************* Copyright (c) 2010 Rafael Palomar You should have...

OpenCV Изображение с веб камеры
Добрый день, товарищи. Потребовалось мне получить изображение с веб камеры, для своей программки на Qt(C++). Решил сделать это с...

11
 Аватар для Decosa
174 / 66 / 21
Регистрация: 06.07.2017
Сообщений: 353
29.07.2021, 15:16
Наверное дело в версии OpenCV и функции VideoCapture().
Попробуйте 700 в качестве параметра.
C++
1
 VideoCapture cap(700);
0
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
29.07.2021, 20:09
grigor3, проверьте, включена ли камера в raspiconfig..
0
2 / 2 / 0
Регистрация: 20.09.2011
Сообщений: 21
02.08.2021, 08:22  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
grigor3, проверьте, включена ли камера в raspiconfig..
камера включена точно, потому что на превью я вижу картинку с камеры

Цитата Сообщение от Decosa Посмотреть сообщение
Наверное дело в версии OpenCV и функции VideoCapture().
Попробуйте 700 в качестве параметра.
C++Выделить код
1
 VideoCapture cap(700);
Попробовал, картинки нет и на превью, все таки этот параметр означает откуда брать картинку.

Добавлено через 47 минут
GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1

Только заметил, в консоли варнинг при выполнении программы. Попробовал еще разные кодеки, эффект тот же.

Добавлено через 9 минут
на Python заработал следующий код, хотя в консоль тот же варнинг падает
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
cap.set(cv.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv.CAP_PROP_FRAME_HEIGHT, 480)
fourcc = cv.VideoWriter_fourcc(*'MJPG')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640,  480))
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    frame = cv.flip(frame, 0)
    out.write(frame)
    cv.imshow('frame', frame)
    if cv.waitKey(1) == ord('q'):
        break
cap.release()
out.release()
cv.destroyAllWindows()
но хоть убейте разницу в коде не вижу.
0
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
02.08.2021, 12:06
Цитата Сообщение от grigor3 Посмотреть сообщение
GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
попробуйте поставить fps не 20, а 30 или 25 или 15..
0
 Аватар для Decosa
174 / 66 / 21
Регистрация: 06.07.2017
Сообщений: 353
02.08.2021, 14:10
grigor3, гугл говорит что в какой-то версии OpenCV обнаружен баг связанный с GStreamer.
Попробуйте пере-собрать\обновить до например OpenCV 4.5.2.

Добавлено через 20 минут
P. S.
В версии OpenCV 4.5.2 конструкция (код под спойлером) не выдает предупреждений.
Code Python for OpenCV 4.5.2

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(700)
fourcc = cv.VideoWriter_fourcc(*'MJPG')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640,  480))
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    # write the frame
    out.write(frame)
    cv.imshow('frame', frame)
    if cv.waitKey(1) == ord('q'):
        break
# Release everything if job is finished
out.release()
cap.release()
cv.destroyAllWindows()
1
2 / 2 / 0
Регистрация: 20.09.2011
Сообщений: 21
02.08.2021, 14:49  [ТС]
Цитата Сообщение от Decosa Посмотреть сообщение
grigor3, гугл говорит что в какой-то версии OpenCV обнаружен баг связанный с GStreamer.
Попробуйте пере-собрать\обновить до например OpenCV 4.5.2.
если можно ссылку пожалуйста, не встречал ничего подобного. У меня 4.5.0 стоит

Добавлено через 3 минуты
Цитата Сообщение от u235 Посмотреть сообщение
попробуйте поставить fps не 20, а 30 или 25 или 15..
пробовал, эффекта нет.

Добавлено через 6 минут
пересобрать opencv на данной железке вряд ли получиться в ближайшее время, ибо там уже много чего сделано, а я очень хорошо помню переход с версии 3 на 4.5.0 и не хочу повторения этого ада на 3-4 дня. Хотя с версии 4.5.0 на 4.5.2 не должно быть кардинальных изменений, там скорее всего только исправления багов должны быть, но шут их знает ...
0
 Аватар для Decosa
174 / 66 / 21
Регистрация: 06.07.2017
Сообщений: 353
03.08.2021, 01:58
Т. е. с одной и той же версией в питоне запись выполняется но вываливает варнинг, на плюсах записи нет.
Правильно понял?

P. S.
Вот здесь что то странное:
Фрагмент кода
C++
1
2
3
4
5
6
7
8
9
    VideoCapture cap(0);   //, CAP_DSHOW);
    cap.set(CAP_PROP_FRAME_WIDTH, 640);
    cap.set(CAP_PROP_FRAME_HEIGHT, 480);
    if(!cap.isOpened()){
        cout << "Error opening video stream" << endl;
        return -1;
    }
    int frame_width = cap.get(cv::CAP_PROP_FRAME_WIDTH);
    int frame_height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);

Вначале устанавливаете разрешение для камеры, а затем делаете запрос разрешения с камеры.
Уверены что камера именно 640 х 480 ?

Попробуйте так:
Фрагмент кода

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
VideoCapture cap(0);
if (!cap.isOpened())
{
    cout << "Error opening video stream or file" << endl;
    return -1;
}
 
int frame_width = cap.get(CV_CAP_PROP_FRAME_WIDTH);
int frame_height = cap.get(CV_CAP_PROP_FRAME_HEIGHT);
VideoWriter video("outcpp.avi", CV_FOURCC('M', 'J', 'P', 'G'), 20, Size(frame_width, frame_height), true);
 
for (;;)
{
    Mat frame;
    cap >> frame;
    video.write(frame);
    imshow("Frame", frame);
    char c = (char)waitKey(33);
    if (c == 27)
        break;
}


Забыли подключить:
C++
1
2
#include <opencv2/core.hpp>     // Basic OpenCV structures (cv::Mat)
#include <opencv2/videoio.hpp>  // Video write
Несколько ссылок на примеры:
0
2 / 2 / 0
Регистрация: 20.09.2011
Сообщений: 21
03.08.2021, 11:39  [ТС]
Цитата Сообщение от Decosa Посмотреть сообщение
Т. е. с одной и той же версией в питоне запись выполняется но вываливает варнинг, на плюсах записи нет.
Правильно понял?
да верно все, но варнинг на плюсах тоже есть.

Цитата Сообщение от Decosa Посмотреть сообщение
Вначале устанавливаете разрешение для камеры, а затем делаете запрос разрешения с камеры.
Уверены что камера именно 640 х 480 ?
на Raspberry если не указать разрешение камеры то по умолчанию на ней 1280x720, а это многовато для моих целей. Согласен что немного наговнокожено, и надо бы вынести эти значения в константы, но не парюсь ибо это тестовый пример.

Цитата Сообщение от Decosa Посмотреть сообщение
Забыли подключить:
C++Выделить код
1
2
#include <opencv2/core.hpp>     // Basic OpenCV structures (cv::Mat)
#include <opencv2/videoio.hpp>  // Video write
нет, просто криво скопировал, не попали

Добавлено через 6 минут
Цитата Сообщение от Decosa Посмотреть сообщение
Несколько ссылок на примеры:
An example using VideoCapture and VideoWriter class
video-write
Creating a video with OpenCV
Спасибо, много их уже пересмотрел, везде примерно одно и то же, но по вашей ссылке порадовала строчка )))
C++
1
2
// Transform from int to char via Bitwise operators
    char EXT[] = {(char)(ex & 0XFF) , (char)((ex & 0XFF00) >> 8),(char)((ex & 0XFF0000) >> 16),(char)((ex & 0XFF000000) >> 24), 0};
я просил у вас сылку на статью где вы прочитали про проблемы с GStreamer, может удастся найти что то там.

Добавлено через 3 часа 10 минут
Думаю с этой веткой решено, собрал на другой железяке opencv4.5.3 и тот же код что в python что в gcc-c++ работает прекрасно. Только вот галочки вопрос решен не вижу.
0
 Аватар для Decosa
174 / 66 / 21
Регистрация: 06.07.2017
Сообщений: 353
03.08.2021, 12:22
Цитата Сообщение от grigor3 Посмотреть сообщение
я просил у вас сылку на статью где вы прочитали про проблемы с GStreamer, может удастся найти что то там.
Так сходу не найду. Просто вложил в запрос строку с ошибкой.
Была ссылка с обсуждением в гитхаб, и там уже ссылка на OpenCV с перечнем исправлений в том-же гите. Но я так и не понял о какой версии шла речь.
1
2 / 2 / 0
Регистрация: 20.09.2011
Сообщений: 21
03.08.2021, 13:01  [ТС]
Цитата Сообщение от Decosa Посмотреть сообщение
Так сходу не найду. Просто вложил в запрос строку с ошибкой.
Была ссылка с обсуждением в гитхаб, и там уже ссылка на OpenCV с перечнем исправлений в том-же гите. Но я так и не понял о какой версии шла речь.
я нашел сам обсуждение уже, и как раз 2 бага в opencv4.5.0. Баг с GStreamer исправили еще в 4.5.1, а вот второй баг с кудой только в 4.5.2. Я собрал 4.5.3

Добавлено через 7 секунд
Цитата Сообщение от Decosa Посмотреть сообщение
Так сходу не найду. Просто вложил в запрос строку с ошибкой.
Была ссылка с обсуждением в гитхаб, и там уже ссылка на OpenCV с перечнем исправлений в том-же гите. Но я так и не понял о какой версии шла речь.
я нашел сам обсуждение уже, и как раз 2 бага в opencv4.5.0. Баг с GStreamer исправили еще в 4.5.1, а вот второй баг с кудой только в 4.5.2. Я собрал 4.5.3
0
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,877
02.05.2022, 01:05
C++
1
2
3
4
5
6
begin0:
    if (capture.read(frame) == false)
    {
        cout << "ERROR: Cannot read a frame from video one" << endl;
        goto begin0;
    }
Добавлено через 1 минуту
С первого кадра вылетало. Далее работало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.05.2022, 01:05
Помогаю со студенческими работами здесь

OpenCV, две камеры (стереозрение)
Доброго суток времени. Надеюсь раздел выбрал верный. Перелопатил много страниц, большинство тем очень старые и ответов полных нету....

Запись видео с веб камеры
Новичок в этом деле. Я даже не знаю в какую тему мой вопрос опубликовать. Сейчас набираю теорию для программы. Попытался погуглить,...

Запись видео из веб-камеры на Qt4
Мне надо создать приложение которое будет записывать видео из веб-камеры и сохранять на диск. Данное приложение должно бить написано...

OpenCV захват видео с веб-камеры
Начал изучать OpenCV. В просторах интернета нашел данный код: #include &lt;cv.h&gt; #include &lt;highgui.h&gt; #include &lt;stdlib.h&gt; ...

OpenCV 300 не показыват видео с камеры
столкнулся со следующей проблемой, скачал opencv300 (VS12) подключил все, PATH не забыл, все заработало, картинки открывает, различные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru