一般我们在边缘检测中,因为需要对图像的质量要求较高,所以一般需要对图像进行滤波处理,常见的滤波处理有:均值平滑滤波、高斯滤波、中值滤波、双变滤波等。下面是实现代码:
#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; }
图片就不放了,大家可以找一些图片对比一下,看看效果。