本文主要是介绍【OpenCV基础】图像翻转、旋转变换、视频加载、摄像头调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处
文章目录
- 一、图像翻转和旋转变换
- 1.API- flip
- 2.效果展示
- API- transpose
- 二、视频加载与摄像头调用
- 1.API-VideoCapture
- 2.关键设置
- 播放速度的设置
- if (c == 27) { break};的解释
- 3.代码演示
- 视频加载
- 摄像头调用
一、图像翻转和旋转变换
1.API- flip
函数原型:
void flip(InputArray src, OutputArray dst, int flipCode)
参数含义:
src,输入矩阵
dst,翻转后矩阵,类型与src一致
flipCode,翻转模式,
flipCode==0垂直翻转(沿X轴翻转);
flipCode>0水平翻转(沿Y轴翻转);
flipCode<0水平垂直翻转(先沿X轴翻转,再沿Y轴翻转,等价于旋转180°)
2.效果展示
API- transpose
作用:获得转置矩阵
函数原型:
void transpose(InputArray src, OutputArray dst);
transpose结合flip可以实现图像的90、180、270度的顺时针旋转
1.顺时针旋转90度
transpose(frame, frame);
flip(frame, frame, 1);
2.顺时针旋转180度
flip(frame, frame, -1);
3.顺时针旋转270度
transpose(frame, frame);
flip(frame, frame, 0);
二、视频加载与摄像头调用
1.API-VideoCapture
1.调用电脑摄像头:VideoCapture cap(1);
2.调用USB外接摄像头:VideoCapture cap(0);
3.选择可用的摄像头:VideoCapture cap(-1);
4.获取IP视频流:例如:VideoCapture video(“D:/images/balltest.mp4”);VideoCapture cap( “http:/ / youku.elecfans.com/video.flv”);
其他表示方法:
例如VideoCapture cap(0);等同于
VideoCapture capture;
capture.open(0);
2.关键设置
播放速度的设置
等速:1000/video.get(CAP_PROP_FPS),1000毫秒(1秒)除以帧率(FPS)等于每帧图像播放时停留的时间,意味着播放速度等于原视频的速度,一般视频播放速度大于25帧/s,因此当频率为25/s时,1000/video.get(CAP_PROP_FPS)等于40毫秒
char c = waitKey(1000/video.get(CAP_PROP_FPS));if (c == 27) { // ESC退出break;}
加速:X<1000/video.get(CAP_PROP_FPS),假如X小于40,则会加速播放;
减速:X>1000/video.get(CAP_PROP_FPS)。
char c = waitKey(X);if (c == 27) { // ESC退出break;}
if (c == 27) { break};的解释
waitKey(delay)返回值:
等待期间有按键:返回按键的ASCII码(比如:Esc的ASCII码为27);
因此按了esc之后就会break,退出程序。
3.代码演示
视频加载
#include<iostream>
#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{ //获取摄像头:电脑自带摄像头 为1 ,外部 0;VideoCapture video("视频路径以及名称")VideoCapture video("D:/images/balltest.mp4");//判断视频能否正常打开if (video.isOpened()) {cout << "width=" << video.get(CAP_PROP_FRAME_WIDTH);cout << "fps=" << video.get(CAP_PROP_FPS) << endl;//读取视频流中的频率;}else{printf("请确认视频文件路径是否正确");return -1;}//循环发布图像while (1)//循环显示每一帧{Mat frame;//存储每一帧图像video >> frame;//读取当前帧if (frame.empty()){break;}imshow("video", frame);//播放速度设置char c = waitKey(1000/video.get(CAP_PROP_FPS));if (c == 27) { // ESC退出break;} }video.release();//释放资源 waitKey();return 0;
}
摄像头调用
#include<iostream>
#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{ //获取摄像头:电脑自带摄像头 为1 ,外部 0;VideoCapture video("视频路径以及名称")VideoCapture video(0);//判断视频能否正常打开if (video.isOpened()) {cout << "width=" << video.get(CAP_PROP_FRAME_WIDTH);cout << "height=" << video.get(CAP_PROP_FRAME_HEIGHT) << endl;}else{printf("请确认视频文件路径是否正确");return -1;}//循环发布图像while (1)//循环显示每一帧{Mat frame;//存储每一帧图像video >> frame;//读取当前帧if (frame.empty()){break;}flip(frame, frame, 1);//左右翻转imshow("video", frame);char c = waitKey(5);if (c == 27) { // ESC退出break;} }video.release();//释放资源 waitKey();return 0;
}
循环发布图像可以改为:
//循环发布图像Mat frame;//存储每一帧图像while (video.read(frame)) {if (frame.empty()){break;}flip(frame, frame, 1);//左右翻转imshow("video", frame);char c = waitKey(5);if (c == 27) { // ESC退出break;}}video.release();//释放资源 waitKey();return 0;
}
这篇关于【OpenCV基础】图像翻转、旋转变换、视频加载、摄像头调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!