OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby.MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV本身包含多种功能:图像处理、三维重建、机器视觉、人机互动、物体识别以及人脸识别等。
安装教程请自行搜索。
测试Opencv是否安装好:
#include
using namespace cv;
int main()
{
Mat pic = imread("HappyFish.png");
imshow("pic", pic);
waitKey(0);
return 0;
}
成功的话就是运行之后会显示出来图片。
用OpenCV做一个图片模糊实例:
#include
using namespace cv;
int main()
{
Mat pic = imread("HappyFish.png");
Mat d;
cv::blur(pic, d, Size(7, 7), Point(-1, -1));
namedWindow("pic", WINDOW_NORMAL);
imshow("pic", pic);
imshow("blur", d);
waitKey(0);
return 0;
}
可以看到模糊成功了。
Opencv测试结束。
主要用到的变量类型:Mat
读取图片:imread
Mat frame;
frame=imread("图片路径");
展示图片:imshow,waitKey
imshow("窗口名",frame);
waitKey(n); //n表示窗口持续的时间(毫秒),若n=0,则接收到按键后窗口才会消失
可调节大小的窗口:nameWindow("窗口名",WINDOW_NORMAL)
图片实际上是一个数字矩阵,每个矩阵上的元素标志着该点的亮度信息,一般图片由一个unsigned char*指针去储存,由于unsigned char类型的size为1个字节,所以一般图片每个点记录的亮度信息可以有256个等级(O-255)。
对于灰度图片,每个点保存该点的亮度信息,即一个黑点,该点的值为0。一个白点的亮度为255。(中间为不同灰度级的图片)
对于彩色图像(以BGR图片为例),连续3个unsigned char表示一个彩色点的信息,第一个表示该点的蓝光亮度,第二个表示该点的绿光亮度,第三个表示该点的红光亮度。
1.灰度化处理(src为输入的图片,dst为输出的灰度图片,都是Mat类型):
cvtColor(src,dst,COLOR_BGR2GRAY);
2.BGR图片转为RGB图片(src为输入的图片,dst为输出的图片,都是Mat类型):
cvtColor(src,dst,COLOR_BGR2RGB);
3.模糊处理(src为输入的图片,dst为输出的灰度图片,Size(7,7)表示模糊核的长度为7*7,Point为模糊和的中心坐标,当指定为-1时,默认正中心为中心点):
blur(src,dst,Size(7,7),Point(-1,-1));
4.掩模操作(可锐化、边缘提取等)(src.depth()表示输入图的深度,灰度图的深度为1,BGR彩色图的深度为3,还有可能有深度为4的BGRA等图像):
当掩模矩阵数字加起来为0时是在做边缘提取;像下面这个加起来是1,做的是边缘锐化。
Mat mask=(Mat_
filter2D(src,dst,src.depth(),mask);
5.通道分割split(处理后,bgr_channel[0],bgr_channel[1],bgr_channel[2]为bgr对应的亮度图)
vector
split(src,bgr_channel);
6.通道合并merge(经过处理后bgr_channels的通道按顺序作为bgr合并生成dst彩色图)
Merge(bgr_channel,dst);
7.直方图均衡变换
equalizeHist(src,dst);
5和6一般用于彩色图像的直方图均衡化。
代码实例:对图片进行灰度化,用 [-1,-1,-1;-1,8,-1;-1,-1,-1]对图片进行边缘提取
#include
using namespace cv;
int main()
{
Mat pic = imread("HappyFish.png");
Mat d,dst;
//cv::blur(pic, d, Size(7, 7), Point(-1, -1));
cvtColor(pic, d, COLOR_BGR2GRAY);//灰度化
namedWindow("pic", WINDOW_NORMAL);
//掩模运算
Mat mask = (Mat_(3, 3) << -1, -1, -1, -1, 8, -1, -1, -1, -1); //掩膜的初始化
filter2D(pic, dst, pic.depth(), mask);
imshow("pic", pic);
imshow("gray", d);
imshow("yanmo", dst);
waitKey(0);
return 0;
}