웹캡을 이용한 실시간 영상 사용하기
VideoCapture
: 프에임을 읽어오기 위해서 사용
: 비디오 처리의 핵심 역할을 하는 클래스
cv::VideoCapture::VideoCapture '변수이름';
cv::VideoCapture::VideoCapture ();
cv::VideoCapture::VideoCapture '변수이름'(const std::string& filename);
cv::VideoCapture::VideoCapture '변수이름'(int device);
- 매개변수 : 파일 이름 또는 장치 번호
- 장치 번호 (카메라 번호)
- 0 : 내장 웹캠 카메라 번호
- 0 : 데스크탑 같이 usb를 이용해 연결한 웹캡의 카메라 번호
- 1 : 노트북에서 웹캡 추가할 경우
- 변수이름
- 보통 capture를 줄여 cap으로 사용
- 변수 cap: 카메라를 준비시킴, 픽셀 정보를 담지 않음
- 픽셀 정보를 담는 변수는 따로 선언
- isOpened()
: 정상적 연결을 위한 확인 코드필요
: 카메라 정보가 있으면 1, 없으면 0 반환
예제 코드
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::VideoCapture cap(0);
if(!cap.isOpened()) {
std::cerr << "Error: Cannot open video file!" << std::endl;
return -1;
}
cv::Mat frame;
while (1)
{
cap >> frame; //프레임 읽기
cv::imshow("camera img" , frame);
if (cv::waitKey(1) == 27) break;
}
return 0;
}
- operator >> (연산자 오버로딩)
- read()와 동일하게 다음 프레임을 읽음
- 비디오의 다음 프레임을 읽어 Mat 객체로 반환
- 코드 간결해짐
- read()와 동일하게 다음 프레임을 읽음
- cv::waitKey(1) == 27
- 1 : 실시간 처리에서 자주 사용
- 1밀리초만 대기 -> 프레임 사이의 대기 시간이 거의 없어 비디오 스트리밍이나 실시간 작업에 적합
- 높은 FPS 지원 => 거의 즉시 다음 프레임을 처리해 지연 최소와
- 실시간 입력
- 27 : esc키 누르면 종료
- 1 : 실시간 처리에서 자주 사용
waitKey(시간) => 일단 비디오는 영상의 초당 프레임 수(FPS, Frame Per Second)에 기반해 계산
- 대기 시간(ms) = 1000 / FPs
- 예)
- FPS가 30인 비디오 -> 1000 / 30 = 33.3333... ==> cv::waitKey(30)
- FPS가 60인 비디오 -> 1000 / 60 = 16.6666... ==> cv::waitKey(16)
코드 결과 (웹캠 영상 캡쳐함)

해상도 변경도 해보려했지만,
내가 쓰는 맥북이 720p 지원이므로,,,
넘긴다..
참고 블로그
[C++ opencv] 카메라, 웹캠 영상 입력받기 VideoCapture()
본문 목표 OpenCV를 사용하는 목적은 여러가지가 있을 수 있다. 정지되어 있는 사진, 움직이는 물체를 담은 동영상, 실시간 카메라 영상 등 다양하게 사용할 수 있는데, 이번에는 실시간 카메라 영
diyver.tistory.com
'비디오 코덱' 카테고리의 다른 글
waitKey(30) >= 0 알아보기 (0) | 2024.11.27 |
---|---|
일반 동영상 불러오기 : VideoCapture() (0) | 2024.11.27 |
흑백 변환 : cvtColor() vs imread() (0) | 2024.11.27 |
흑백 이미지 처리의 효율 (1) | 2024.11.27 |
컬러를 흑백으로 변환하기 : cvtColor() (0) | 2024.11.27 |