掩膜的计算
代码
先上代码。
我自学的方式是先看代码,然后在代码中遇到不懂的再逐个查询资料,深入学习,直到学懂。大家按照符合自己的方式学习就好了,适合自己的才是最好的。共勉。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat src, dst;
src = imread("E:/minions.jpg");
if (!src.data)
{
cout << "error" << endl;
return -1;
}
namedWindow("原图", WINDOW_AUTOSIZE);
imshow("原图", src);
double t = getTickCount();//记录程序执行时间
Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0,
-1, 5, -1,
0, -1, 0);//定义掩膜
filter2D(src, dst, src.depth(), kernel);//计算掩膜 src.depth()是src的位图深度有32/24/8等
double timcount = (getTickCount() - t) / getTickFrequency();
cout << "timecount is " << timcount << endl;
namedWindow("掩膜后的结果", WINDOW_AUTOSIZE);
imshow("掩膜后的结果", dst);
waitKey(0);
return 0;
}
掩膜
掩膜,是用选定的图形、图像或物体,对处理的图像(全部或局部)进行遮挡,已到达控制图像处理区域和控制图像处理过程的目的。
掩膜的主要用途:
- 提取感兴趣的区域;
- 屏蔽作用;
- 结构特征提取;
- 特殊形状图像的制作;
代码解释
之前已经解释过具体功能的代码就不进行解释了,如果想了解的话可以看下我之前的文章,毕竟咱们是在不断学习的过程中,要牢记旧知识,不断学习新知识。
//getTickCount()函数是获取当前的时间(秒数),实质是获取当前距离格林威治时间的秒数,
//后面再次使用getTickCount(),与getTickFrequency()函数进行相除,从而获得程序执行的耗时
//getTickFrequency()函数返回CPU频率,这里C和C++不一样,C的getTickFrequency返回的单位是ms,C++返回的单位是s
//所以使用C的getTickFrequency还要进行处理才可得到准确的结果
double t = getTickCount();
double timcount = (getTickCount() - t) / getTickFrequency();
//这里是定义掩膜矩阵,<char>表示矩阵内的元素类型是char类型,也可以自定义为int、float等,(3,3)表示矩阵的形状是3*3
Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0,
-1, 5, -1,
0, -1, 0);//定义掩膜
//filter2D(输入图像,输出图像,目标图像所需要的深度,掩膜,锚点),功能是将图像做卷积
//锚点anchor,即图像的中心像素,默认(-1,-1),可以不填写,如果想要自定义的话请按照Point(-1,-1)的形式,因为锚点的类型是Point型的
filter2D(src, dst, src.depth(), kernel);//计算掩膜 src.depth()是src的位图深度有32/24/8等
各种处理后的结果图片对比:
可以看出经过掩膜处理后的图像显得更生动,更有质感了。
这篇opencv的学习笔记就这样结束了。
我是一个初学者,如果有相关的问题大家可以评论提出一起讨论,或指出我的错误之处,大家一起学习,一起进步,谢谢啦。