2020.3.31
opencv之入门篇
1.图像的读取
#include <opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(){
Mat img;
img = imread("E:/test/project/testimgs/1.jpg", 0);
if (img.empty()){
cout << " it's empty" << endl;
return -1;
}
imshow("img", img);
waitKey(0);
system("pause");
return 0;
}
2.摄像头获取并保存视频
#include <opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(){
Mat in_frame, out_frame;
const char win1[] = "capture.", win2[] = "video";
double fps = 60;
char file_out[] = "video.avi";
VideoCapture capture(0);
while(capture.isOpened()) {
int width = (int)capture.get(CAP_PROP_FRAME_WIDTH);
int height = (int)capture.get(CAP_PROP_FRAME_HEIGHT);
VideoWriter recVid(file_out, VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, Size(width, height));
namedWindow(win1);
namedWindow(win2);
capture >> in_frame;
cvtColor(in_frame, out_frame,COLOR_BGR2GRAY);
recVid << out_frame;
imshow(win1, in_frame);
imshow(win2, out_frame);
if (waitKey(1000 / fps) >= 0)
break;
}
capture.release();
system("pause");
return 0;
}
3.视频读取
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
void main() {
VideoCapture cap("1.mp4");
if (!cap.isOpened()) {
cout << "输入错误" << endl;
return;
}
int width = cap.get(CAP_PROP_FRAME_WIDTH);
int height = cap.get(CAP_PROP_FRAME_HEIGHT);
int frameRate = cap.get(CAP_PROP_FPS);
int totalFrames = cap.get(CAP_PROP_FRAME_COUNT);
cout << "视频宽度=" << width << endl;
cout << "视频高度=" << height << endl;
cout << "视频总帧数=" << totalFrames << endl;
cout << "帧率=" << frameRate << endl;
Mat frame;
while (1){
cap >> frame;
if (frame.empty())
break;
imshow("video", frame);
if (waitKey(20) > 0)
break;
}
cap.release();
}
4.摄像头帧处理显示
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
void main() {
VideoCapture cap;
cap.open(0);
if (!cap.isOpened())
return;
Mat frame,outframe;
while (true){
cap >> frame;
cvtColor(frame, outframe,COLOR_BGR2HSV);
break;
imshow("video", outframe);
if (waitKey(20) > 0)
break;
}
cap.release();
destroyAllWindows();
}
5.简单的视频播放器
#include<opencv2/opencv.hpp>
#include<iostream>
#include<string>
using namespace cv;
using namespace std;
Mat image;
string windowName = "1.mp4";
string trackBarName = "播放进度";
double totalFrame = 1.0;
double currentFrame = 1.0;
int trackbarValue = 1;
int trackbarMax = 255;
double frameRate = 1.0;
VideoCapture video;
double controlRate = 0.1;
void TrackBarFunc(int, void(*));
int main(){
video.open("1.mp4");
if (!video.isOpened())
{
cout << "Failed to open video" << endl;
}
totalFrame = video.get(CAP_PROP_FRAME_COUNT);
frameRate = video.get(CAP_PROP_FPS);
double pauseTime = 1000 / frameRate;
namedWindow(windowName);
createTrackbar(trackBarName, windowName, &trackbarValue, trackbarMax, TrackBarFunc);
TrackBarFunc(0, 0);
while (true){
video.read(image);
resize(image, image, Size(500, 400));
imshow(windowName, image);
waitKey(pauseTime);
controlRate++;
if (controlRate > totalFrame) {
break;
}
}
video.release();
waitKey();
return 0;
}
void TrackBarFunc(int, void(*)){
controlRate = (double)trackbarValue / trackbarMax * totalFrame;
video.set(CAP_PROP_POS_FRAMES, controlRate);
}