一般我们在边缘检测中,因为需要对图像的质量要求较高,所以一般需要对图像进行滤波处理,常见的滤波处理有:均值平滑滤波、高斯滤波、中值滤波、双变滤波等。下面是实现代码:
#include < iostream>
#include <opencv/cv.h>
#include <opencv2/opencv.hpp>
using namespace std;
int main()
{
string imName = "lena.jpg";
cv::Mat im = cv::imread(imName);
cv::imshow("原图",im);
cv::Mat imGs = im.clone();
int kSize = 21;
cv::Mat outim;
cv::blur(imGs, outim, cv::Size(kSize, kSize), cv::Point(-1,-1));//均值平滑滤波
cv::imshow("blur", outim);
cv::GaussianBlur(imGs, outim, cv::Size(kSize, kSize), 0, 0); //高斯滤波
cv::imshow("gsblur", outim);
cv::medianBlur(imGs, outim, kSize); //中值滤波
cv::imshow("median", outim);
cv::bilateralFilter(imGs, outim, kSize, kSize 2, kSize/2); //双变滤波
cv::imshow("bilateral", outim);
cout << imGs.type() << endl;
IplImage inData = cvCreateImage(imGs.size(), 8, imGs.channels());
IplImage outData = cvCreateImage(imGs.size(), 8, imGs.channels());
inData = IplImage(imGs);
cvSmooth(inData, outData, 4, 0);//双边滤波平滑
cv::Mat o = cv::cvarrToMat(outData);
cv::imshow("smooth", o);
cv::waitKey(0);
return 0;
}
图片就不放了,大家可以找一些图片对比一下,看看效果。