OpenCV (4) Image and Video
1. Read and write a image:
Read a image and convert it to a gray-scale image. Save the gray-scale image.
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
Mat gray_img = imread("data/image/mini.jpg",
IMREAD_GRAYSCALE);
imshow("mini", gray_img);
waitKey(0);
destroyAllWindows();
// save the image.
imwrite("data/image/gray_mini.jpg", gray_img);
return 0;
}
2. Open a video:
The video is composed of a series of graphics, each one is called frame.
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
// init an object of VideoCapture.
VideoCapture cap("data/video/ggo.mp4");
// make sure that the video is opened successfully.
if (!cap.isOpened()) {
cout << "Capture open fail !!" << endl;
}
Mat frame;
// read the video frame by frame.
// if the frame is not a null frame, display the frame.
while(cap.read(frame)) {
imshow("frame", frame);
// break the while loop if user press esc.
char key = (char) waitKey(30);
if (key == 27) {
break;
}
}
destroyAllWindows();
return 0;
}
3. cv::VideoCapture::operator>>():
cv::VideoCapture::operator>>() is similar to std::istream::operator>>().
Mat frame;
cap >> frame;
while(!frame.empty()) {
imshow("frame", frame);
char key = (char) waitKey(30);
if (key == 27) {
break;
}
cap >> frame;
}
4. Use VideoCapture to get the information of the video:
int main() {
VideoCapture cap("data/video/prince.mp4");
if (!cap.isOpened()) {
cout << "Capture open fail !!" << endl;
}
cout << "width: " << cap.get(CAP_PROP_FRAME_WIDTH) << endl;
cout << "height: " << cap.get(CAP_PROP_FRAME_HEIGHT) << endl;
cout << "FPS: " << cap.get(CAP_PROP_FPS) << endl;
return 0;
}
Reference
[1] Adrian Kaehler, Gary Bradski, Learning OpenCV 3 , O'Reilly Media (2017)