利用Mat类保存需要读写的图像,Mat类是用于保存图像以及其他矩阵数据的数据结构
imread()函数是用于读取文件中的图片到OpenCV中,说明如下
Mat imread(const string& filename, intflags=1);
第一个参数,const string&类型的filename,填我们需要载入的图片路径名,在Windows操作系统下,OpenCV的imread函数支持如下类型的图像载入。
第二个参数,int类型的flags,为载入标识,他指定一个加载图像的颜色类型
imshow()函数用于在指定的窗口中显示一幅图像,函数原型如下。
void imshow(const string& winname, InputArray mat);
第一个参数,const string&类型的winname,填需要显示的窗口标识名称。
第二个参数,InputArray类型的mat,填需要显示的图像。
imwrite函数是用来输出图像到文件,其声明如下
bool imwrite( const String& filename, InputArray img,const std::vector& params = std::vector());
第一个参数const String& filename表示需要写入的文件名,必须要加上后缀,比如“123.png”。
第二个参数InputArray img表示Mat类型的图像数据。
Mat image = imread("E:\\picture\\lena.jpg");
imshow("原始图", image);
imwrite("E:\\picture\\lenaout.jpg", image);
waitKey(0);
腐蚀操作:
顾名思义,是将物体的边缘加以腐蚀。具体的操作方法是拿一个宽m,高n的矩形作为模板,对图像中的每一个像素x做如下处理:像素x至于模板的中心,根据模版的大小,遍历所有被模板覆盖的其他像素,修改像素x的值为所有像素中最小的值。这样操作的结果是会将图像外围的突出点加以腐蚀。如下图的操作过程:
Mat image = imread("E:\\picture\\lena.jpg");
imshow("原始图", image);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstimg;
erode(image, dstimg, element);
imshow("腐蚀", dstimg);
imwrite("E:\\picture\\lenaout.jpg", dstimg);
waitKey(0);
膨胀操作:
膨胀操作与腐蚀操作相反,是将图像的轮廓加以膨胀。操作方法与腐蚀操作类似,也是拿一个矩形模板,对图像的每个像素做遍历处理。不同之处在于修改像素的值不是所有像素中最小的值,而是最大的值。这样操作的结果会将图像外围的突出点连接并向外延伸。如下图的操作过程:
Mat image = imread("E:\\picture\\lena.jpg");
imshow("原始图", image);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstimg;
dilate(image, dstimg, element);
imshow("膨胀", dstimg);
imwrite("E:\\picture\\lenaout.jpg", dstimg);
waitKey(0);
作用:放大裂缝和低密度区域,消除小物体,在平滑较大物体的边界时,不改变其面积。消除物体表面的突起。
开操作就是对图像先腐蚀,再膨胀。其中腐蚀与膨胀使用的模板是一样大小的。为了说明开操作的效果,请看下图的操作过程:
Mat image = imread("E:\\picture\\lena.jpg");
imshow("原始图", image);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstimg;
morphologyEx(image, dstimg, MORPH_OPEN, element);
imshow("开操作", dstimg);
imwrite("E:\\picture\\lenaout.jpg", dstimg);
waitKey(0);
闭操作:
作用:排除小型黑洞,突触了比原图轮廓区域更暗的区域,将两个区域连接起来,形成连通域。
闭操作就是对图像先膨胀,再腐蚀。闭操作的结果一般是可以将许多靠近的图块相连称为一个无突起的连通域。
Mat image = imread("E:\\picture\\lena.jpg");
imshow("原始图", image);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstimg;
morphologyEx(image, dstimg, MORPH_CLOSE, element);
imshow("闭操作", dstimg);
imwrite("E:\\picture\\lenaout.jpg", dstimg);
waitKey(0);