系统 Ubuntu 18.04
OpenCV 版本 4.5.1
接口类型 C++
安装OpenCV 点我安装

文章目录

  • 0. Ubuntu OpenCV C++ 编译运行示例
  • 1. 显示图片
  • 2. 修改图像
  • 3. 视频
  • 4. Canny边缘检测
  • 5. 视频Canny边缘检测
  • 6. 导出视频Canny边缘检测

0. Ubuntu OpenCV C++ 编译运行示例

  1. C++编译流程

  2. 新建文件夹并进入

mkdir ShowImage && ShowImage
  1. 打开终端,新建cpp文件
touch read.cpp
  1. 编辑read.cpp
gedit read.cpp

拷入下列代码并保存

#include <opencv2/opencv.hpp>using namespace cv;int main(int argc,char **argv)
{Mat img = imread("girl.jpg");imshow("meinv",img);waitKey(0);
}
  1. 拷贝CMakeLists.txt
    ../opencv-4.5.1/samples/cpp/example_cmake中的CMakeLists.txt拷贝到(你新建的文件夹)
  2. 修改CMakeLists.txt

修改前

# Define project name
project(opencv_example_project)# Declare the executable target built from your sources
add_executable(opencv_example example.cpp)# Link your application with OpenCV libraries
target_link_libraries(opencv_example PRIVATE ${OpenCV_LIBS})

修改后(其他不要动,仔细对比)

# Define project name
project(text)# Declare the executable target built from your sources
add_executable(text read.cpp)# Link your application with OpenCV libraries
target_link_libraries(text ${OpenCV_LIBS})
  1. 拷贝图像
    找一张jpg格式的图像重名为girl拷贝到ShowImage文件夹

  2. 编译运行

cmake .
make
./text
  1. 报错
    注意第3步和第6步图像名称
  2. 参考

1. 显示图片

cv::imread 加载图像文件成为一个Mat对象
参数:

  1. 图像文件名
  2. 数值
    <0(IMREAD_UNCHANGED原图
    0(IMREAD_GRAYSCLAE灰度图
    >0(IMREAD_COLORRGB图
//头文件
#include <opencv2/opencv.hpp>//主函数
int main(int argc, char** argv){//读取图片(支持多种格式),返回一个cv::Mat结构(用来处理所有类型的图像)cv::Mat img = cv::imread(argv[1],-1);//如果图片为空(没有载入图片),返回-1if(img.empty()) return -1;//设置窗口cv::namewindow("Examples1", cv::WINDOW_AUTOSIZE);//显示cv::imshow("Example1", img);//<=0,无限等待直到有键按下,>0,等待,继续运行程序(毫秒ms)cv::waitKey(0);//关闭窗口,释放相关联的内存空间cv::destroyWindow("Example1");return 0;
}

OpenCV的函数都在cv空间下,调用OpenCV的函数需要在函数前面加上cv::,这样相当繁琐,我们将使用using namespace cv;指令告诉编译器所以函数都在cv空间中。但是这和其他命名空间有冲突的风险,如果函数foo()存在于cv和std的命名空间,必须指定是位于cv::foo()的函数,还是std::foo()的函数。

#include <opencv2/highgui/highgui.hpp>using namespace cv;int main(int argc,char** argv){Mat img = imread(argv[1],-1);if(img.empty()) return -1;nameWindiw("Example1",cv::WINDOW_SIZE);imshow("Example1",img);waitKey(0);destroyWindow("Example1");
}

2. 修改图像

cv::cvtColor(img,img_gray,CV_BGR2GRAY)彩色空间转换
参数:

  1. 源图像
  2. 转换后的图像
  3. 源和目标色彩空间
    COLOR_BGR2HLS(转HLS)
    COLOR_BGR2GRAY(转灰度)

  1. 新建文件夹并进入
mkdir Gray && Gray
  1. 打开终端,新建cpp文件
touch gray.cpp
  1. 编辑gray.cpp
gedit gray.cpp

拷入下列代码并保存

#include <opencv2/opencv.hpp>//
#include <opencv2/imgproc/types_c.h>using namespace cv;int main(int argc, char** argv)
{Mat img = imread("girl.jpg"),img_gray;imshow("girl",img);cvtColor(img,img_gray,CV_BGR2GRAY);imshow("gray",img_gray);imwrite("gray.jpg",img_gray);waitKey(0);
}
  1. 拷贝CMakeLists.txt
    ../opencv-4.5.1/samples/cpp/example_cmake中的CMakeLists.txt拷贝到Gray文件夹
  2. 修改CMakeLists.txt

修改前

# Define project name
project(opencv_example_project)# Declare the executable target built from your sources
add_executable(opencv_example example.cpp)# Link your application with OpenCV libraries
target_link_libraries(opencv_example PRIVATE ${OpenCV_LIBS})

修改后(其他不要动,仔细对比)

# Define project name
project(text)# Declare the executable target built from your sources
add_executable(text gray.cpp)# Link your application with OpenCV libraries
target_link_libraries(text ${OpenCV_LIBS})
  1. 拷贝图像
    找一张图像重名为girl拷贝到Gray文件夹

  2. 编译运行

cmake .
make
./text

3. 视频

  1. video.cpp
mkdir Video && cd Video
touch video.cpp && gedit video.cpp

拷贝下列代码

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <string>  //学习OpenCV书中无此行,疑似OpenCV版本问题using namespace std;int main(int argc, char** argv)
{cv::Mat frame;cv::namedWindow("Example3",cv::WINDOW_AUTOSIZE);cv::VideoCapture cap;cap.open(string("girl.mp4"));for(;;){cap >> frame;if(frame.empty()) break;cv::imshow("Example3",frame);if(cv::waitKey(33.3333) >=0 ) break;//每秒30帧,每帧停留33.3333秒}return 0;
}
  1. 拷贝并修改CMakeLists.txt
    ../opencv-4.5.1/samples/cpp/example_cmake中的CMakeLists.txt拷贝到Video文件夹

修改前

# Define project name
project(opencv_example_project)# Declare the executable target built from your sources
add_executable(opencv_example example.cpp)# Link your application with OpenCV libraries
target_link_libraries(opencv_example PRIVATE ${OpenCV_LIBS})

修改后(其他不要动,仔细对比)

# Define project name
project(text)# Declare the executable target built from your sources
add_executable(text video.cpp)# Link your application with OpenCV libraries
target_link_libraries(text ${OpenCV_LIBS})
  1. 拷贝图像
    找一张图像重名为video拷贝到Video文件夹

  2. 编译运行

cmake .
make
./text

4. Canny边缘检测

  1. cpp
mkdir Canny边缘检测 && cd Canny边缘检测
touch canny.cpp && gedit canny.cpp

拷贝代码

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/types_c.h>using namespace cv;
int main(int argc, char** argv)
{cv::Mat img = imread("girl.jpg");cv::imshow("girl",img);cvtColor(img,img,CV_BGR2GRAY);//模糊blur(img,img,Size(4,4));cv::Canny(img,img,3,3,3);cv::imshow("Canny",img);cv::imwrite("canny.jpg",img);cv::waitKey(0);
}
  1. 拷贝并修改CMakeLists.txt
    ../opencv-4.5.1/samples/cpp/example_cmake中的CMakeLists.txt拷贝到Canny边缘检测文件夹

修改后(其他不要动,仔细对比)

# Declare the executable target built from your sources
add_executable(text canny.cpp)
  1. 拷贝视频
    找一张图像重名为girl拷贝到Canny边缘检测文件夹

  2. 编译运行

cmake .
make
./text

5. 视频Canny边缘检测

  1. cpp
mkdir 视频Canny边缘检测 && cd 视频Canny边缘检测
touch canny.cpp && gedit canny.cpp

拷贝代码

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/types_c.h>using namespace cv;int main(int argc,char** argv)
{cv::VideoCapture capture("girl.mp4");while(1){Mat frame;capture >> frame;//cv::imshow("girl",frame);cv::cvtColor(frame,frame,CV_BGR2GRAY);cv::blur(frame,frame,Size(4,4));cv::Canny(frame,frame,3,60,3);cv::imshow("Canny",frame);//cv::waitKey(0);if(cv::waitKey(33) >= 0) break;}return 0;
}
}
  1. 拷贝并修改CMakeLists.txt
    ../opencv-4.5.1/samples/cpp/example_cmake中的CMakeLists.txt拷贝到视频Canny边缘检测文件夹

修改后(其他不要动,仔细对比)

# Declare the executable target built from your sources
add_executable(text canny.cpp)
  1. 拷贝视频
    找一个mp4格式的视频并重名为girl拷贝到视频Canny边缘检测文件夹

  2. 编译运行

cmake .
make
./text

6. 导出视频Canny边缘检测

  1. cpp
mkdir 导出视频Canny边缘检测 && cd 导出视频Canny边缘检测
touch canny.cpp && gedit canny.cpp

拷贝代码

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/types_c.h>
#include <iostream>using namespace cv;int main(int argc,char** argv)
{//读取cv::VideoCapture capture("girl.mp4");double fps = capture.get(cv::CAP_PROP_FPS);cv::Size size((int)capture.get(cv::CAP_PROP_FRAME_WIDTH),(int)capture.get(cv::CAP_PROP_FRAME_HEIGHT));//写入cv::VideoWriter writer;   //仅支持avi格式//opencv3为CV_FOURCC(),opencv4为VideoWriter::fourcc()    //灰度图参数isColor设为false(默认为true)    writer.open("bgirl.avi",VideoWriter::fourcc('M','J','P','G'),fps,size,false);cv::Mat frame;for(;;){capture >> frame;if(frame.empty())break;//帧数据为空,跳出cv::cvtColor(frame,frame,CV_BGR2GRAY);//转灰度cv::blur(frame,frame,Size(4,4));//模糊cv::Canny(frame,frame,3,60,3);cv::imshow("Canny",frame);//显示帧cv::waitKey(1000/fps);//每帧停留时间//写入帧writer << frame;}//释放内存capture.release();writer.release();
}
  1. 拷贝并修改CMakeLists.txt
    ../opencv-4.5.1/samples/cpp/example_cmake中的CMakeLists.txt拷贝到导出视频Canny边缘检测文件夹

修改后(其他不要动,仔细对比)

# Declare the executable target built from your sources
add_executable(text canny.cpp)
  1. 拷贝视频
    找一个mp4格式的视频并重名为girl拷贝到导出视频Canny边缘检测文件夹

  2. 编译运行

cmake .
make
./text
  1. Ubuntu下C++ opencv详细教程,句句注释
  2. C++ OpenCV cvtColor CV_BGR2GRAY未声明的标识符的解决办法(四)
  3. OpenCV4 error: ‘CV_CAP_PROP_FRAME_WIDTH’ was not declared in this scope
  4. OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui

学习OpenCV 4(一)相关推荐

  1. 快速系统从零学习OpenCV 4路线图

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转眼间,小白学视觉就要成立三周年了,小白一直是很感谢小伙伴们的支持 ...

  2. 【从零学习OpenCV 4】4种读取Mat类元素的的方法

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  3. 【从零学习OpenCV 4】Mat类构造与赋值

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  4. 【从零学习OpenCV 4】Mat类介绍

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  5. 【从零学习OpenCV 4】安装过程中问题解决方案

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  6. 【从零学习OpenCV 4】了解OpenCV的模块架构

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  7. 【从零学习OpenCV 4】Image Watch插件的使用

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  8. 【从零学习OpenCV 4】opencv_contrib扩展模块的安装

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  9. 【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  10. 【从零学习openCV】IOS7下的人脸检測

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

最新文章

  1. Serverless 下的微服务实践
  2. 基于TensorFlow的简单验证码识别
  3. 特征因子是什么意思_生态因子作用的一般特征
  4. 萧县机器人_全国总决赛第一名!萧县杨楼的这位学生厉害了
  5. 多数据源处理-苞米豆-dynamic
  6. 最前线 | 斗鱼一季度月活用户超虎牙,但上市时间仍不明确
  7. springboot上传文件同时传参数_Spring Boot 系列:使用 Spring Boot 上传文件
  8. java基础-冒泡排序
  9. VS2010远程调试
  10. 基于近邻法的分类器设计
  11. Windows/Mac系统MySQL,MySQL驱动下载和安装
  12. 使用SSH连接linux服务器重启Tomcat服务
  13. mBlock机器人组装教程_mbot机器人如何搭建?mBot机器人套件快速搭建指南
  14. lisp绘制直齿圆柱齿轮_直齿圆柱齿轮的画法
  15. rar压缩包密码解密
  16. 软件著作权申报中60页标准代码文档
  17. 从零开始学习ThingJS之创建/销毁物体
  18. 文件不小心删除了怎么恢复呢,怎么恢复误删除的文件
  19. Ubuntu配置locale
  20. sparksql-分组月度环比同比自动化

热门文章

  1. tekla钢结构算量_钢结构、Tekla及建筑工业化厂商对Tekla软件的开发和应用
  2. 基于HTML5的电子病历编辑方法及系统与流程
  3. idea打包jar包后java运行jar命令提示jar中没有主清单属性的解决方案
  4. 企业微信与视频号裂变如何做私域运营?
  5. php通讯hpsocket,HP-Socket 远程通信 服务端 客户端 源码
  6. matlab非参数功率普估计,【数字信号处理】--功率谱估计
  7. Hadoop原理讲解(面试题)
  8. java海康摄像头添加人脸_java调用海康人脸识别机5603的sdk的使用总结(二)
  9. Scara机器人正逆运动学分析
  10. 商务与经济统计阅读笔记2