【OpenCV基础】图像翻转、旋转变换、视频加载、摄像头调用

本文主要是介绍【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基础】图像翻转、旋转变换、视频加载、摄像头调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/239760

相关文章

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos