<一>快速上手OpenCV
(1)图像显示
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
//Mat是一个类,和C中的int一样的功能;
//imread函数:读入图片(注:图片的绝对地址和图片的格式一定要对!)
Mat img = imread("test1.png");
//imshow函数:图片的显示
imshow("图像", img);
//waitKey(0)是指等待任意键按下
waitKey(0);
}
(2)图像腐蚀
①腐蚀:用图像中暗色部分腐蚀掉图像中高亮部分(额…书上说后面有系统的解释,我还没看到,不过可以直观感受一下什么叫腐蚀)
②贴上代码和示例吧
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
Mat srcimg = imread("timg.jpg");
imshow("腐蚀图像", srcimg);
//getStructuringElement()函数的返回值为指定形状和尺寸的结构元素
Mat element = getStructuringElement(MORPH_RECT, Size(12, 12));
Mat dstimg;
//erode函数用于图像腐蚀,三个参数的含义:将srcimg腐蚀为参数为element的dstimg
erode(srcimg, dstimg, element);
imshow("效果图", dstimg);
waitKey(0);
return 0;
}
(3)图像模糊
①图像模糊:对图像进行均值滤波操作(逃…
②代码和示例
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
Mat src = imread("模糊.jpg");
imshow("原始图", src);
Mat dstimg;
//blur函数进行模糊操作,将模糊处理后的函数存放在dstimg以显示
blur(src, dstimg, Size(6,6));
imshow("效果图", dstimg);
waitKey(0);
return 0;
}
结论:发现Size(x1,x2)中的x取值对模糊程度有影响,两个x取值应该一个是横向一个是纵向,然后值越大那么模糊程度越高。
(4)canny边缘检测
①边缘检测:转化为灰度图–>用blur函数进行模糊降噪–>用canny函数进行边缘检测,用途未知,可以先直观感受一下,以后学习应该会加深理解,是计算机图像很重要的一个东东。
②代码和示例
#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
Mat img = imread("canny_test.jpg");
imshow("原始图", img);
Mat dstimg, edge, grayimg;
//创建和img同样大小的dstimg图像矩阵
dstimg.create(img.size(), img.type());
//将图像转化为灰度图
cvtColor(img, grayimg, COLOR_BGR2GRAY);
//用3*3内核降噪
blur(grayimg, edge, Size(3, 3));
//Canny函数
Canny(edge, edge, 3, 9, 3);
imshow("效果图", edge);
waitKey(0);
return 0;
}
(5)OpenCV视频操作基础
①什么意思:利用OpenCV中的VideoCapture类对视频进行读取以及对摄像头的调用(想必对我要实现的内容有些重要,?)
具体了解一下吧,分为视频读取&&摄像头调用两类。
②读取视频–>播放视频
其实质就是视频读入到VideoCapture类对象之后,用循环的操作将每一帧展现出来。
额…接下来 就是看看代码和示例吧:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
//这一句等同于:VedioCapture capture; capture.open(" ");
//意思就是初始化的时候类似于C中int a;a=5和int a=5的区别而已...
//这里的1.avi问题我还没有解决,待解决???
VideoCapture capture("1.avi");
while (1)
{
Mat frame;
//按照每帧的单位读取视频然后进行播放
capture >> frame;
imshow("读取视频", frame);
waitKey(30);
}
return 0;
}
视频展示示例不太好贴,贴了也没有太大意义,嘤~
③调用摄像头采集图像(额,机器人里面希望能够实现)
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
//从摄像头读取就发现参数变成0了
VideoCapture capture(0);
while (1)
{
Mat frame;
capture >> frame;
imshow("摄像头读取", frame);
waitKey(30);
}
return 0;
}
④这是一个书中提到的调用摄像头配合Canny检测,倒不如说是将图片进行动态化Canny检测好了。
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VedioCapture capture(0);
Mat edges;
while(1)
{
Mat frame;
capture>>frame;
cvtColor(frame,edges,CV_BGR2GRAY);
blur(edges,edges,Size(7,7));
Canny(edges,edges,0,30,3);
imshow("被Canny后的视频",edges);
if(waitKey(30)>=0)
break;
}
return 0;
}
感想:第一次写优快云博客,也是希望督促学习新东西吧,用了两个小时,把最基础的经典代码码到博客,以后好好看,好好学习吧。?
参考资料:OpenCV3编程入门(毛星云著,电子工业出版社)