当前位置: 首页 > news >正文

VC++中使用OpenCV读取图像、读取本地视频、读取摄像头并实时显示

VC++中使用OpenCV读取图像、读取本地视频、读取摄像头并实时显示

最近闲着跟着油管博主murtazahassan,学习了一下LEARN OPENCV C++ in 4 HOURS | Including 3x Projects | Computer Vision,对应的Github源代码地址为:Learn-OpenCV-cpp-in-4-Hours

关于OpenCV

OpenCV是一个开源的计算机视觉库,其官网地址为:https://opencv.org/,对应Github源码地址为:https://github.com/opencv/opencv,目前来说OpenCV对C++、Python的支持比较友好,同时还支持Java、Javascript、C#等语言。
OpenCV官网地址
Github源代码地址

OpenCV官网文档地址:https://docs.opencv.org/4.x/d9/df8/tutorial_root.html
OpenCV API文档

OpenCV官方给的示例C++程序:

// Change path/to/image to a real path of an image, then build this demo with OpenCV package and run it
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
int main()
{std::string image_path = "path/to/image";Mat img = imread(image_path, IMREAD_COLOR);imshow("Display window", img);int k = waitKey(0); // Wait for a keystroke in the windowreturn 0;
}

关于Windows下Visual Studio 2022中配置OpenCV库的使用我就不赘余了,方便的话可以直接看Setup OpenCV in Visual Studio 2022 for C/C++ Development或OpenCV C++ and Microsoft Visual Studio: A Complete Tutorial on Installation and Usage for Beginners这个视频教程。当然也可以参考油管博主murtazahassan对应的Github仓库Learn-OpenCV-cpp-in-4-Hours里面的Installing OpenCV on Windows for C++,如下图所示:

Installing OpenCV on Windows for C++
关于在Mac下使用XCode运行OpenCV的可以参考Installing OpenCV on Mac for C++
Installing OpenCV on Mac for C++

Visual Studio中使用OpenCV读取图像

首先使用VS2017新建一个控制台项目OpencvDemo01,并在项目根目录放置一些资源文件,资源文件下载地址为:https://github.com/murtazahassan/Learn-OpenCV-cpp-in-4-Hours/tree/main/Resources
Resources资源文件下载地址

如下图所示:
OpenCV项目目录
资源文件
在Visual Studio中使用C++ OpenCV库读取图像并显示很简单,示例代码如下:

#include <opencv2/opencv.hpp>
#include <string>
#include <iostream>using namespace cv;
using namespace std;int main()
{std::string imgPath = "Resources/test.png";cv::Mat img;img = cv::imread(imgPath);cv::imshow("Show Image", img);cv::waitKey(0);cv::destroyAllWindows();return 0;
}

运行结果如下图所示:
使用OpenCV读取图像

使用OpenCV读取本地视频

示例代码如下:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{std::string videoPath = "Resources/test_video.mp4";cv::VideoCapture videoCap(videoPath);cv::Mat frame;if (videoCap.isOpened()) {while (videoCap.read(frame)) {cv::imshow("Video Frame", frame);char chKey = cv::waitKey(10);if (chKey == 27) {break;}}}videoCap.release();cv::destroyAllWindows();return 0;
}

运行结果如下图所示:
OpenCV读取本地视频

OpenCV读取摄像头数据

OpenCV读取本地摄像头数据也很简单,示例代码如下:

#include <opencv2/opencv.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>using namespace std;
using namespace cv;// 摄像头中读取每一帧图像,然后输出到屏幕,按ESC键退出int main()
{cv::VideoCapture cap(0);cv::Mat frame;if (cap.isOpened()) {	// 如果VideoCapture初始化成功while (cap.read(frame)) {cv::imshow("WebCam Image", frame);char chKey = cv::waitKey(10);if (chKey == 27) {	// 27 对应ESC键的ASCII码// 如果按下了ESC键,则退出循环break;}}}cap.release();cv::destroyAllWindows();return 0;
}

运行结果如下图所示:
OpenCV读取本地摄像头数据

参考资料

  • LEARN OPENCV C++ in 4 HOURS | Including 3x Projects | Computer Vision
  • murtazahassan/Learn-OpenCV-cpp-in-4-Hours
  • OpenCV官网
  • OpenCV-Get Started
  • OpenCV Github仓库源代码
  • OpenCV tutorial

相关文章:

  • 2024年美赛数学建模思路 - 复盘:校园消费行为分析
  • [zabbix] zabbix监控其他
  • GO基础进阶篇 (十三)、泛型
  • Linux网络编程---IP 地址格式转换函数
  • L3上云01 | 分布式、微服务概念
  • 手机常用的root方案
  • 嵌入式-Stm32-江科大基于标准库的GPIO的八种模式
  • vue2 el-table行悬停时弹出提示信息el-popover
  • XXL-Job的搭建接入Springboot项目(详细)
  • RTSP/Onvif安防视频云平台EasyNVR迁移盘符后启动异常的问题排查与解决
  • HashMap学习和线程安全的HashMap
  • 蓝桥杯每日一题----货物摆放
  • web架构师编辑器内容-编辑器组件图层面板功能开发-锁定隐藏、键盘事件功能的开发
  • 中级Python面试问题
  • 概率论与数理统计————3.随机变量及其分布
  • “大数据应用场景”之隔壁老王(连载四)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【知识碎片】第三方登录弹窗效果
  • 2017-08-04 前端日报
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript服务器推送技术之 WebSocket
  • Odoo domain写法及运用
  • Rancher-k8s加速安装文档
  • React-redux的原理以及使用
  • 大主子表关联的性能优化方法
  • 聚类分析——Kmeans
  • 你不可错过的前端面试题(一)
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 数据可视化之 Sankey 桑基图的实现
  • 新版博客前端前瞻
  • MyCAT水平分库
  • #NOIP 2014# day.1 T2 联合权值
  • $.proxy和$.extend
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (12)Hive调优——count distinct去重优化
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • .Net FrameWork总结
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET序列化 serializable,反序列化
  • @RequestBody的使用
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [C#]winform部署yolov9的onnx模型
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能
  • [Flex][问题笔记]TextArea滚动条问题
  • [leetcode] 66. 加一
  • [Leetcode] 寻找数组的中心索引
  • [LeetCode]-225. 用队列实现栈
  • [linux] git lfs install 安装lfs
  • [linux] Key is stored in legacy trusted.gpg keyring