在写作之时,笔者已经接触OpenCV大概三个月了,从刚开始配置环境的“艰辛”,到能用OpenCV完成一些视觉类的小工程,这一路上遇到了不少坑,也是很后悔在学习之初没想过把这些坑记录下来。面对新项目时,仍深觉自己的思路非常局限,所以借着寒假时间较为充裕,带着我对OpenCV的爱,重新上路。
快速上手OpenCV,可以从几个简单的程序开始。
在每个程序执行之前都需采取类似操作——在Visual Studio中新建项目,新建文件夹,放置图片到cpp源文件同一目录下。【后不再说明
图像显示
在OpenCV3中,图像显示过程很简单,只需要用imread函数载入到图像存储数据结构Mat类中,然后用imshow函数显示即可。
#include<iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("fg.jpg");
imshow("fg", img);
waitKey(10000);
}
图像腐蚀
用暗色部分腐蚀掉图像中的高亮部分——erode函数
OpenCV highgui模块头文件
OpenCV图像处理头文件
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
Mat srcImage = imread("fg.jpg");
imshow("[原图]腐蚀操作", srcImage);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
erode(srcImage, dstImage, element);
imshow("[效果图]腐蚀操作", dstImage);
waitKey(0);
return 0;
}
图像模糊
用OpenCV对图像进行均值滤波操作——blur函数
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
Mat srcImage = imread("fg.jpg");
imshow("[原图]均值滤波", srcImage);
Mat dstImage;
blur(srcImage, dstImage, Size(7, 7));
imshow("[效果图]均值滤波", dstImage);
waitKey(0);
return 0;
}
Canny边缘检测
载入图像,将其转为灰度图,再用blur函数进行图像模糊以降噪,然后用canny函数进行边缘检测
#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
Mat srcImage = imread("fg.jpg");
imshow("[原图]Canny边缘检测", srcImage);
Mat dstImage, edge,grayImage;
dstImage.create(srcImage.size(), srcImage.type());
cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);
blur(grayImage, edge, Size(3,3));
Canny(edge, edge, 3, 9, 3);
imshow("[效果图]Canny边缘检测", edge);
waitKey(0);
return 0;
}