OpenCV学习总结之C++版

本文中代码所采用的是opencv4.6.0,采用cmake来管理工程,mac系统
opencv简介opencv是“开源计算机视觉库”,「open sourec computer vision library」,是一个基于开源发行的跨平台计算机视觉库,包含了许多图像处理和计算机视觉方面的通用算法,这里主要学习其api的应用。
快速上手opencv图像处理第一个程序:图像显示,代码如下//// created by on 2022/11/9.//#include //相关头文件using namespace std;int main() { cv::mat srcimage = cv::imread(../dog.jpg); //载入图像 cv::imshow([原始图], srcimage); //显示图像 cv::waitkey(0); //等待用户任意键按下才终止窗口 return 0;}第二个程序:图像腐蚀腐蚀是最基本的形态学运算之一:就是用图像中的暗色部分“腐蚀”掉图像中的高亮部分
部分。
显示效果如上图
代码如下:
//// created by on 2022/11/9.//#include //模块头文件#include //图像处理头文件//using namespace cv; //cv命名空间int main() {//载入原图,保存在mat矩阵类对象中 cv::mat srcimage = cv::imread(../cat.jpeg);//显示原图 cv::imshow(faster,srcimage);//进行腐蚀操作 cv::mat element = cv::getstructuringelement(cv::morph_rect,cv::size(15, 15)); cv::mat dstimage; cv::erode(srcimage, dstimage, element);//显示效果图 cv::imshow(laster, dstimage); cv::waitkey(0);return 0;}getstructuringelement函数返回一个指定形状和尺寸的内核矩阵,然后调用erode函数进行图像腐蚀操作。
第三个程序:图像模糊
对图像进行均值滤波操作,主要使用到blur函数代码如下:
//// created by on 2022/11/9.//#include #include //using namespace cv;int main() { cv::mat srcimage = cv::imread(../cat.jpeg); cv::imshow(src picture, srcimage);//进行均值滤波操作 cv::mat dstimage; cv::blur(srcimage, dstimage, cv::size(7, 7));//显示效果图 cv::imshow(last picture, dstimage); cv::waitkey(0);return 0;}第四个程序:canny边缘检测先载入图像,并将其转成灰度图,再用blur函数进行图像模糊以降噪,然后用canny函数进行边缘检测,最后进行显示
代码如下:
//// created by on 2022/11/9.//#include #include //using namespace std;int main() { cv::mat srcimage = cv::imread(../cat.jpeg); cv::imshow(canny test, srcimage); //显示原始图//将原始图像转化为灰度图像 cv::mat dstimage, edge, grayimage;//创建与原图同类型和大小的矩阵 dst dstimage.create(srcimage.size(), srcimage.type());//将原图像转换为灰度图像 cv::cvtcolor(srcimage, grayimage, cv::color_bgr2gray);//先使用3x3的内核矩阵来降噪 cv::blur(grayimage, edge, cv::size(3, 3));//运行canny 算子 cv::canny(edge, edge, 3, 9, 3);//显示效果图 cv::imshow(edge test, edge); cv::waitkey(0);return 0;}第五个程序:读取并播放视频
使用videocapture从视频文件或摄像头捕获视频并显示出来有两种写法,分别是:
先实例化,再初始化videocapture video; video.open(one.mp4);
在实例化的同时进行初始化videocapture video(one.mp4);
视频读入到videocapture类对象之后,紧接着可以用一个循环将每一帧显示出来,相关代码如下:
等)时,在头部直接指定,如:```javascript,如下:
//// created by 方 on 2022/11/9.//#includeusing namespace cv;int main() {//1. 读入视频videocapture video(../one.mov);//2. 循环显示每一帧while(1) { mat frame; //定义一个mat对象,用来存储每一帧图像 video>>frame; //读取当前帧 imshow(read_video, frame); //显示当前帧 waitkey(30); //延时30ms }return 0;}第六个程序:调用摄像头采集图像只需将上述代码中的视频文件名“one.mov”换成0就行,即videocapture(0)表示调用摄像头而不是从文件中读取视频, 注意不要添加
结合摄像头调用实例程序来配合canny边缘检测,得到canny边缘检测并高斯模糊后的摄像头采集视频,代码如下://// created by on 2022/11/9.//#include int main() { //从摄像头读入视频 cv::videocapture video(0); cv::mat edge; //循环显示每一帧 while(1) { //1. 读入图像 cv::mat frame; //定义一个mat变量,用于存储每一帧的图像 video >> frame; //读取当前帧 //2. 将原图转换成灰度图 cv::cvtcolor(frame, edge, cv::color_bgr2gray); //3. 使用3x3的内核矩阵来进行降噪 2x3+1=7 cv::blur(edge, edge, cv::size(7,7)); //进行模糊 //4. 进行canny边缘检测并显示 cv::canny(edge, edge, 0, 30, 3); cv::imshow(the video after canny, edge); //显示经过处理后的当前帧 if(cv::waitkey(30) >= 0) break; //延时30ms } return 0;}

EDA技术概况
以太网供电和HDBaseT供电的标准及所具有的的应用优势
什么是电磁继电器,电磁继电器工作原理是什么,电磁继电器由什么组成,电磁继电器如何应用?
数字音频最新技术:单芯片数字立体声子系统
3G时代有多美?日本最流行3G应用TOP10
OpenCV学习总结之C++版
人工智能在往一个重要的智能化方向发展_能听懂人话的接口
PID原理与参数调试
量子计算新突破!微软成功开发具有前瞻性的量子计算机硬件系统
一个开关电源传导、辐射处理案例
韩国民众冒雨抗议部署“萨德”,什么是萨德?部署萨德的后果是啥!
不同雷达的电磁信号调制方式
红外热成像助力海事安全
移远通信获ASPICE CL2国际认证 广和通共享两轮出行5G模组方案
紫光国微发挥科技创新力量 赋能社会数字化转型
“智能安防”提升城市管理水平
未来iPhone可能会使用的功能:苹果开发手势识别系统曝光
C++编程中带#条件语句的用法和作用详解
!销售/回收HP4285A HP 4285A信号源HP428
什么是氮化镓合封芯片科普,氮化镓合封芯片的应用范围和优点