目录
1.图像的归一化
2.图像的放大和缩小
3. 图像反转
4.图片旋转
5.获取视频文件电脑摄像头的使用
6.视频的处理与保存
接下来,我们继续讲解C++的OpenCV图像处理:
void QuickDemo::norm_demo(Mat &image) {
Mat dst;
image.convertTo(dst,CV_32F);//把类型转化为float类型
std::cout << image.type() << dst.type() << std::endl;
//转化为float类型后就可以使用归一化了
normalize(image, dst, 1.0, 0, NORM_MINMAX);
imshow("图像归一化", dst);
}
void QuickDemo::resize_demo(Mat &image) {
Mat zoomin, zoomout;//定义放大和缩小
int h = image.rows;
int w = image.cols;
resize(image,zoomin,Size(h/2,w/2),0,0,INTER_LINEAR);//0,0这两个参数表示水平方向和数值方向缩放的比率
imshow("zoomin", zoomin);
//放大
resize(image, zoomout, Size(3*h / 2, 3*w / 2), 0, 0, INTER_LINEAR);//0,0这两个参数表示水平方向和数值方向缩放的比率
imshow("zoomout", zoomout);
}
void QuickDemo::flip_demo(Mat &image) {
Mat dst;
flip(image, dst, 0);//参数0表示上下反转,1左右反转,-1表示180度旋转
imshow("图像反转", dst);
}
void QuickDemo::rotate_demo(Mat& image) {
//旋转
Mat dst, M;//dst输出,M是旋转矩阵
int w = image.cols;
int h = image.rows;
M = getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0);//获得旋转矩阵,参数为矩阵中心,旋转角度,尺寸是否变化,1就是不变
warpAffine(image, dst, M, image.size());
imshow("旋转演示", dst);
}
void QuickDemo::video_demo(Mat& image) {
VideoCapture capture(0); //初始化对象,把0换成视频文件就可以传入需要处理的视频
//VideoCapture capture("D://.......");
Mat frame;
while (true) {
capture.read(frame);
flip(frame, frame, 1);
if (frame.empty()) {
break;
}
imshow("frame", frame);
//这里的下面可以对视频做一些前面讲的操作
//例如做一个色彩空间的转换
colorSpace_Demo(frame);
//视频需要键盘操作停顿
int c = waitKey(10);
if (c == 27) {//退出
break;
}
}
//视频做完了一定要释放
capture.release();
}
由于我的电脑摄像头有问题这里就不做运行。
视频的每一个画面称为一个frame,视频的分辨率或者大小成为视频的清晰度。fps是指画面每秒传输的帧数。
void QuickDemo::video_demo(Mat& image) {
//VideoCapture capture(0); //获取摄像头文件,初始化对象,把0换成视频文件就可以传入需要处理的视频
VideoCapture capture("D:\video_data");
//获取frame的宽高
int frame_width = capture.get(CAP_PROP_FRAME_WIDTH);
int frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);
int frame_count = capture.get(CAP_PROP_FRAME_COUNT);
double fps = capture.get(CAP_PROP_FPS);
std::cout << "frame width:" << frame_width << std::endl;//标准的输入输出
std::cout << "frame height:" << frame_height << std::endl;
std::cout << "frame count:" << frame_count << std::endl;
std::cout << "FPS" << fps << std::endl;
//将处理好的视频的保存
VideoWriter writer("D:/test.mp4",capture.get(CAP_PROP_FOURCC),fps,Size(frame_width,frame_height),true);
Mat frame;
while (true) {
capture.read(frame);
flip(frame, frame, 1);
if (frame.empty()) {
break;
}
imshow("frame", frame);
//这里的下面可以对视频做一些前面讲的操作
//例如做一个色彩空间的转换
colorSpace_Demo(frame);
//视频处理好了开始保存
writer.write(frame);
//视频需要键盘操作停顿
int c = waitKey(10);
if (c == 27) {//退出
break;
}
}
//视频做完了一定要释放
capture.release();
writer.release();
}