본문 바로가기

OpenCV

ch04 video

#python code

import cv2

def camera_in():
    cap = cv2.VideoCapture(0)

    if not cap.isOpened():
        print("Camera open failed!")
        return

    print("Frame width:", round(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
    print("Frame height:", round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

    while True:
        ret, frame = cap.read()
        if not ret:
            break

        inversed = cv2.bitwise_not(frame)

        cv2.imshow("frame", frame)
        cv2.imshow("inversed", inversed)

        if cv2.waitKey(10) == 27:  # ESC key
            break

    cap.release()
    cv2.destroyAllWindows()

def video_in():
    cap = cv2.VideoCapture("D:\\projects\\SampleCode\\006939-master\\ch04\\video\\stopwatch.avi")

    if not cap.isOpened():
        print("Video open failed!")
        return

    print("Frame width:", round(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
    print("Frame height:", round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    print("Frame count:", round(cap.get(cv2.CAP_PROP_FRAME_COUNT)))

    fps = cap.get(cv2.CAP_PROP_FPS)
    print("FPS:", fps)

    delay = round(1000 / fps)

    while True:
        ret, frame = cap.read()
        if not ret:
            break

        inversed = cv2.bitwise_not(frame)

        cv2.imshow("frame", frame)
        cv2.imshow("inversed", inversed)

        if cv2.waitKey(delay) == 27:  # ESC key
            break

    cap.release()
    cv2.destroyAllWindows()

def camera_in_video_out():
    cap = cv2.VideoCapture(0)

    if not cap.isOpened():
        print("Camera open failed!")
        return

    w = round(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    h = round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = cap.get(cv2.CAP_PROP_FPS)

    fourcc = cv2.VideoWriter_fourcc(*'DIVX')
    delay = round(1000 / fps)

    outputVideo = cv2.VideoWriter("D:\\projects\\SampleCode\\006939-master\\ch04\\video\\output.avi", fourcc, fps, (w, h))

    if not outputVideo.isOpened():
        print("File open failed!")
        return

    while True:
        ret, frame = cap.read()
        if not ret:
            break

        inversed = cv2.bitwise_not(frame)
        outputVideo.write(inversed)

        cv2.imshow("frame", frame)
        cv2.imshow("inversed", inversed)

        if cv2.waitKey(delay) == 27:
            break

    cap.release()
    outputVideo.release()
    cv2.destroyAllWindows()

def main():
    camera_in()
    video_in()
    camera_in_video_out()

if __name__ == "__main__":
    main()

// C++ code


#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

void camera_in();
void video_in();
void camera_in_video_out();

int main(void)
{
	camera_in();
	video_in();
	camera_in_video_out();

	return 0;
}

void camera_in()
{
	VideoCapture cap(0);

	if (!cap.isOpened()) {
		cerr << "Camera open failed!" << endl;
		return;
	}

	cout << "Frame width: " << cvRound(cap.get(CAP_PROP_FRAME_WIDTH)) << endl;
	cout << "Frame height: " << cvRound(cap.get(CAP_PROP_FRAME_HEIGHT)) << endl;

	Mat frame, inversed;
	while (true) {
		cap >> frame;
		if (frame.empty())
			break;

		inversed = ~frame;

		imshow("frame", frame);
		imshow("inversed", inversed);

		if (waitKey(10) == 27) // ESC key
			break;
	}

	destroyAllWindows();
}

void video_in()
{
	VideoCapture cap("stopwatch.avi");

	if (!cap.isOpened()) {
		cerr << "Video open failed!" << endl;
		return;
	}

	cout << "Frame width: " << cvRound(cap.get(CAP_PROP_FRAME_WIDTH)) << endl;
	cout << "Frame height: " << cvRound(cap.get(CAP_PROP_FRAME_HEIGHT)) << endl;
	cout << "Frame count: " << cvRound(cap.get(CAP_PROP_FRAME_COUNT)) << endl;

	double fps = cap.get(CAP_PROP_FPS);
	cout << "FPS: " << fps << endl;

	int delay = cvRound(1000 / fps);

	Mat frame, inversed;
	while (true) {
		cap >> frame;
		if (frame.empty())
			break;

		inversed = ~frame;

		imshow("frame", frame);
		imshow("inversed", inversed);

		if (waitKey(delay) == 27) // ESC key
			break;
	}

	destroyAllWindows();
}

void camera_in_video_out()
{
	VideoCapture cap(0);

	if (!cap.isOpened()) {
		cerr << "Camera open failed!" << endl;
		return;
	}

	int w = cvRound(cap.get(CAP_PROP_FRAME_WIDTH));
	int h = cvRound(cap.get(CAP_PROP_FRAME_HEIGHT));
	double fps = cap.get(CAP_PROP_FPS);

	int fourcc = VideoWriter::fourcc('D', 'I', 'V', 'X');
	int delay = cvRound(1000 / fps);

	VideoWriter outputVideo("output.avi", fourcc, fps, Size(w, h));

	if (!outputVideo.isOpened()) {
		cout << "File open failed!" << endl;
		return;
	}

	Mat frame, inversed;
	while (true) {
		cap >> frame;
		if (frame.empty())
			break;

		inversed = ~frame;
		outputVideo << inversed;

		imshow("frame", frame);
		imshow("inversed", inversed);

		if (waitKey(delay) == 27)
			break;
	}

	destroyAllWindows();
}

C++ Code 출처 : OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝 - 황선규 저


Frame width: 640
Frame height: 480
Frame width: 640
Frame height: 480
Frame count: 378
FPS: 30.0

'OpenCV' 카테고리의 다른 글

ch05 contrast  (0) 2024.05.19
ch05 brightness  (0) 2024.05.19
ch04 utils  (0) 2024.05.19
ch04 trackbar  (0) 2024.05.19
ch04 trackbar  (0) 2024.05.19