美文网首页OpenCv
与OpenCV的第二天

与OpenCV的第二天

作者: Code_r_Wang | 来源:发表于2017-01-17 21:54 被阅读254次

第一件事:简单程序上手

1. 第一个程序:图像显示

图像显示过程十分简单,只需 imread 函数载入图像到数据结构 Mat 类中,然后 imshow 函数显示即可。

#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {
    cv::Mat img = cv::imread("1.jpg"); //imread 载入图片
    cv::imshow("载入的图片", img); //imshow 展示图片
    cv::waitKey(0); //等待任意键按下
    return 0;
}

放置一张图片,并改名为程序中的 1.jpg 之后,运行程序。

运行效果图

2. 第二个程序:图像腐蚀

基本图形学运算之一,用图片中暗的部分 腐蚀 掉图片中亮的部分。

#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {

    //载入原图
    cv::Mat srcImg = cv::imread("1.jpg");
    cv::imshow("【原图】腐蚀", srcImg);

    //进行腐蚀操作
    cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(15,15));
    cv::Mat dstImg;
    cv::erode(srcImg, dstImg, element);

    //按下任意键后继续
    cv::waitKey();

    //显示效果图
    cv::imshow("【效果图】腐蚀", dstImg);
    cv::waitKey();
    return 0;
}

程序首先载入名称为 1.jpg 的图片并显示,之后通过 getStructuringElement 函数生成一个指定形状和尺寸的结构元素(内核矩阵)。接着调用 erode 函数进行腐蚀操作,最后将结果矩阵显示。

运行效果图【原图】 运行效果图【腐蚀图】

3. 第三个程序:模糊

对图像进行均值滤波操作,达到模糊效果。

#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {

    //加载原图并显示
    cv::Mat srcImage = cv::imread("1.jpg");
    cv::imshow("【原图】均值滤波", srcImage); 
    
    //按下任意键继续
    cv::waitKey();
    
    //均值滤波操作
    cv::Mat dstImage;
    cv::blur(srcImage, dstImage, cv::Size(21,21));
    
    //显示结果图
    cv::imshow("【效果图】均值滤波", dstImage);
    
    cv::waitKey();
    return 0;
}

程序依然载入一张名为 1.jpg 的图片并显示,之后调用一次 blur 函数生成结果矩阵并显示。

运行效果图【原图】 运行效果图【模糊图】

4. 第四个程序:边缘检测

运用 canny 函数进行边缘检测。

#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {

    //载入原图并显示
    cv::Mat srcImage = cv::imread("1.jpg");
    cv::imshow("【原图】边缘", srcImage);
    
    //按任意键继续
    cv::waitKey();
    
    //转化灰度矩阵
    cv::cvtColor(srcImage, grayImage, cv::COLOR_BGR2GRAY);
    //降噪
    cv::blur(grayImage, edge, cv::Size(3,3));
    //canny算子
    cv::Canny(edge, edge, 3, 9,3);
    
    //展示效果图
    cv::imshow("【效果图】边缘", edge);
    
    cv::waitKey();
    return 0;
}

程序首先载入图像,并转换成灰度图,再用 blur 函数进行降噪,最后用 canny 函数进行边缘检测并显示。

运行效果图【原图】 运行效果图【边缘检测图】

四个简单的小程序,初窥 OpenCV


第二件事:基本视频操作

主要是通过 VideoCapture 类来对视频进行读取和显示。

1. 读取并播放视频

首先初始化一个 VideoCapture 变量,然后循环读取每一帧并显示。

#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {
    cv::VideoCapture capture;
    capture.open("1.mp4");

    //或构造函数初始化
    //cv::VideoCapture capture("1.mp4");
    
    //循环显示每一帧
    while (1) {
        
        //定义 Mat 变量
        cv::Mat frame;
        
        //输出一帧到 frame 中
        capture>>frame;
        
        //显示当前帧
        cv::imshow("视频", frame);

        //延迟30ms
        cv::waitKey(30);
    }

    return 0;
}
运行效果图

2. 调用摄像头采集图像

我们只需要将上述代码中的 "1.mp4" 替换成 0 即可。

#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {
    cv::VideoCapture capture;
    capture.open(0);

    //或构造函数初始化
    //cv::VideoCapture capture(0);
    
    //循环显示每一帧
    while (1) {
        
        //定义 Mat 变量
        cv::Mat frame;
        
        //输出一帧到 frame 中
        capture>>frame;
        
        //显示当前帧
        cv::imshow("视频", frame);

        //延迟30ms
        cv::waitKey(30);
    }

    return 0;
}

3. 在视频上加一些处理

对每一帧进行边缘检测之后再显示即可。

#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {
    cv::VideoCapture capture;
    capture.open(0);

    //或构造函数初始化
    //cv::VideoCapture capture(0);
    
    //循环显示每一帧
    while (1) {
        
        //定义 Mat 变量
        cv::Mat frame;
        
        //输出一帧到 frame 中
        capture>>frame;
        
        //边缘检测
        cv::Mat edge,grayImg;
        cv::cvtColor(frame, grayImg, cv::COLOR_BGR2GRAY);
        cv::blur(grayImg, edge, cv::Size(3,3));
        cv::Canny(edge, edge, 3, 9, 3);

        //显示效果图
        cv::imshow("边缘", edge);

        //延迟30ms
        cv::waitKey(30);
    }

    return 0;
}
运行效果图

第三件事:生成Xcode项目,查看并编译 OpenCV 源码

在之前下载的 OpenCV 中并不包含源码,所以需要下载 OpenCV 完整源码,并通过 cmake(开源并且跨平台的安装编译工具) 来生成 Xcode 项目。通过 Xcode 可以方便的对源代码进行查看、更改及编译。

1. 下载 OpenCV 完整源码

下载 OpenCV

点击 **OpenCV for Linux/Mac** 下载最新源码

2. 生成 Xcode 项目

下载之后首先解压缩,并在 OpenCV-x.x.x 目录下创建 xcode 文件夹,打开 mac 的终端,cd 命令进入刚刚创建的 xcode 目录执行如下命令(这里就用到了之前下载的cmake)。
cmake -G "Xcode" ..
耐心等待..
完成之后,进入 xcode 目录,找到 .xcodeproj 文件并打开。

打开 **Xcode** 工程 **Xcode** 工程详情

在工程目录下就可以选择一个感兴趣的项目查看其源码,比如 opencv_core 模块,打开 modules/opencv_core/Src/matrix.cpp 查看源代码。

**matrix.cpp** 文件中 **Mat** 类的某个构造函数

3. 编译工程

Xcode"command" + "R" 组合键,可直接进行编译,默认是 ALL_BUILD 启动项,即编译所有模块。可更改启动项,只编译部分模块。如下图:

单击 **ALL_BUILD** 选中所需模块

编译成功之后会在工程目录 lib/debug 目录下生成本次编译的 OpenCV 依赖库,可供以后使用。

相关文章

网友评论

  • 冰三尺:请问作者有OpenCV的学习资料吗?

本文标题:与OpenCV的第二天

本文链接:https://www.haomeiwen.com/subject/ldpmbttx.html