从零开始的OpenCV之路(二) 文件简介和几个好玩的小例子

    上一节我们成功安装了OpenCV,使用Win的同学可以参考别的前辈的文章,特别注意的使用VS配置OpenCV的时候经常会出现很多错误,试着把提示的错误的所有信息去百度一下。在Win上使用CV我只用过一次,着实也是费了一番功夫。这一节先说说头文件动态库对应的功能,然后给出几个看起来有意思的小例子。OpenCV的学习和C++那种基础语言的学习不一样,这是一种实用的工具,所以本着在实践中去检验真理的原则,以后更多的会用例子的形式去说。希望各位看官能够自己把代码敲进去不要复制粘贴,机器环境千差万别,调整检验的过程也是很重要的学习的过程。

    之前说到使用OpenCV ,就是使用头文件+动态库的形式。我们先了解一下这些头文件对应的大体是什么功能或者说是模块。/usr/local/Cellar/opencv/3.4.1_5/include/opencv 和 /usr/local/Cellar/opencv/3.4.1_5/include/opencv2

opencv有 cv.h cv.hpp cvaux.h cvaux.hpp cvwimage.h cxcore.h cxcore.hpp cxeigen.hpp cxmisc.h highgui.h ml.h;这些头文件以.h结尾的是C形式的头文件,.hpp是C++形式的头文件。这里的头文件是属于OpenCV1.0大致有的最基础的头文件了,也就是核心。

opencv2里有很多头文件和文件夹,简述几个常用的有用

core 核心模块 里面有CV基本的数据结构 绘图的函数 辅助的一些函数和宏 都说了是core了肯定是核心啦

highgui 这里面事涉及到GUI方面了 就是图形界面 有一些基础的函数和接口

imgproc 这里面是图像处理模块包含如 线性非线性变化 直方图 图形几何变化 和特征检测什么的

photo 图像去噪和修复

stitching 图像拼接 

video 视频处理组件

ml 机器学习模块 

objdetect 目标检测模块

features2d 2d功能模块

calib3d 有关相机和3D 模块


下面给几个快速入门的好玩的例子

1.图像腐蚀

额 看起来很厉害 貌似是用阴暗的点去替换掉高亮的点 图像形态学的原理得以后再说 我只是看起来挺厉害的 拿出来玩玩

代码:

#include <iostream>
#include <opencv.hpp>
#include <highgui.hpp>
#include <opencv.hpp>
#include <imgproc.hpp>

using namespace std;
using namespace cv;
int main(int argc, const char * argv[]) {
    // insert code here...
    Mat Imags = imread("/Users/apple1/Desktop/兔子.PNG");//读取图片
    imshow("source", Imags);//显示图片在 名为"source"的窗口里
    Mat element = getStructuringElement(MORPH_RECT, Size(15,15));//获得用来腐蚀的内核矩阵
    Mat Imags2;//用来存放腐蚀之后的图片
    erode(Imags,Imags2,element);//进行腐蚀操作
    imshow("target", Imags2);//显示图片 在名为"target"的窗口里
    cvWaitKey(0);//等待按键操作再执行后续 按随意键将进行下一步 return 程序结束
    return 0;
}

效果 :


感觉这只兔子一下子变老了很多 显然 黑色线条变粗了 黑线条周围的点都被黑色替换了。

2.图像模糊

下一个例子是图像模糊 利用的是均值滤波 还是 看看效果先 具体啥原理以后再说 算法书还没到 先看看热闹

#include <iostream>
#include <opencv.hpp>
#include <highgui.hpp>
#include <opencv.hpp>
#include <imgproc.hpp>

using namespace std;
using namespace cv;
int main(int argc, const char * argv[]) {
    // insert code here...
    Mat Imags = imread("/Users/apple1/Desktop/兔子.PNG");//读取图片
    imshow("source", Imags);//显示图片在 名为"source"的窗口里
    Mat Imags2;//用来存放模糊之后的图片
    blur(Imags, Imags2, Size(20,20));//进行均值滤波 字面上感觉应该是在20*20的像素内 取平均值 然后低于的或者高于的被替换掉
    imshow("target", Imags2);//显示图片 在名为"target"的窗口里
    cvWaitKey(0);//等待按键操作再执行后续 按随意键将进行下一步 return 程序结束
    return 0;
}

怕不是我的近视程度又加深了 很明显看到图像模糊了 

3.边缘检测 

吊炸天的来了 

#include <iostream>
#include <opencv.hpp>
#include <highgui.hpp>
#include <opencv.hpp>
#include <imgproc.hpp>

using namespace std;
using namespace cv;
int main(int argc, const char * argv[]) {
    // insert code here...
    Mat Imags = imread("/Users/apple1/Desktop/兔子.PNG");//读取图片
    imshow("source", Imags);//显示图片在 名为"source"的窗口里
    Mat edge ,grayImage;//应该是一个是边缘 一个是灰度图 别问我为啥 我猜的
    cvtColor(Imags, grayImage, CV_BGR2GRAY);//图片的二值画 五颜六色变成非黑即白呗
    blur(grayImage, edge, Size(3,3));//这里据说是降噪
    Canny(edge,edge,3,9,3);//用Canny算子 本科的时候听过一点图像处理的课 貌似是用一个矩阵处理一下图片
    imshow("target", edge);//显示图片 在名为"target"的窗口里
    cvWaitKey(0);//等待按键操作再执行后续 按随意键将进行下一步 return 程序结束
    return 0;
}

一只黑白的兔子 嘿嘿 仔细观察会发现 原来的边缘 都被一层线包上了 达到了边缘检测的效果 可能是图片边缘少 效果不明显


今天辛苦这只兔子了 下次我还是多找找别的图片吧 。综上 我们了解了基本的头文件的类型。在以后的项目过程中 选择适当的文件 当然你要是都扩进去也挺好的。然后用眼睛看到了一些基本的图像处理的操作,说真的,第一次看的时候挺惊艳的。所以,就此误入此路一生吧。下一节开始,就要真的进行真格的学习了。我买了两种书 三本 这本《OpenCV3编程入门》是讲CV技术的。今天快递只到了这一本。另外试讲基础算法的。我尽量试试融合到一起看看。水了一节 不过玩的过程还是挺开心的。诸君晚安。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值