一、图像腐蚀
函数为:
CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT,const Scalar& borderValue=morphologyDefaultBorderValue() );
二、图像模糊
函数为
//! a synonym for normalized box filter CV_EXPORTS_W void blur( InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT );
三、边缘检测
函数为
//! applies Canny edge detector and produces the edge map. CV_EXPORTS_W void Canny( InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false );
四、测试代码
#pragma once class BaseDeal { public: BaseDeal(); //图像腐蚀 void DealErode(std::string strFileName); //图像模糊 void DealBlur(std::string strFileName); //图像边缘检测 void DealCanny(std::string strFileName); };
#include "stdafx.h" #include "BaseDeal.h" BaseDeal::BaseDeal() { } void BaseDeal::DealErode(std::string strFileName) { Mat srcMat = imread(strFileName); imshow("原图", srcMat); Mat matElement = getStructuringElement(MORPH_RECT, Size(15,15)); Mat destMat; erode(srcMat, destMat, matElement); imshow("腐蚀", destMat); waitKey(1000); } void BaseDeal::DealBlur(std::string strFileName) { Mat srcImage = imread(strFileName); imshow("均值滤波{原图}", srcImage); Mat destImage; blur(srcImage, destImage, Size(7,7)); imshow("均值滤波{效果图}", destImage); } void BaseDeal::DealCanny(std::string strFileName) { Mat srcImage = imread(strFileName); imshow("原始图{边缘检测}", srcImage); Mat matEdge; //边缘Mat Mat matGrayImage;//灰度图像Mat //将原图转换为灰度图像 cvtColor(srcImage, matGrayImage, CV_RGB2GRAY/*CV_BayerRG2GRAY*/); //使用3*3内核降噪 blur(matGrayImage, matEdge, Size(3,3)); //运行CANNY算子 Canny(matEdge, matEdge, 3,9,3); imshow("边缘检测效果图", matEdge); waitKey(1000); }
main函数
#include "stdafx.h" #include "BaseDeal.h" int main() { BaseDeal base; //base.DealErode("F:/1.jpg"); //base.DealBlur("F:/1.jpg"); base.DealCanny("F:/2.jpg"); waitKey(6000); }
结果图片
图像腐蚀:
图像模糊:
边缘检测:
这是由于
cvtColor(srcImage, matGrayImage, CV_BayerRG2GRAY); CV_BayerRG2GRAY>7,程序会崩溃,可能这个值过大会导致图片大小变大,最后结果图片可以看出只边缘检测了一小部分,还有一大部分被丢失掉了;
正确图像结果:
cvtColor这个函数存在OpenCV中有BUG,CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn=0 ); code 的值不能超过7 ,也就是值为8就会崩溃。