该函数通过将使用 Sobel 算子计算的第二个 x 和 y 导数相加来计算源图像的拉普拉斯算子。
滤波器样式
[0 1 0;
1 -4 1;
0 1 0;]
void cv::Laplacian(InputArray src,OutputArray dst, int ddepth, int ksize = 1, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT )
ddepth 输出图像深度
ksize 核大小
scale 尺度放缩因子
该函数使用 ksize × ksize中值滤波器平滑图像。多通道图像的每个通道都是独立处理的。
void cv::medianBlur(InputArray src,OutputArray dst, int ksize )
ksize 核大小
执行高级形态变换。可以选择不同的形态学操作,并可以多次执行。
void cv::morphologyEx(InputArray src,OutputArray dst, int op, InputArray kernel, Point anchor = Point(-1,-1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar & borderValue = morphologyDefaultBorderValue())
op 形态学操作
kernel 结构元素 使用getStructuringElement
Mat cv::getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1) )
#include
#include
#include
#include
#include
#include
class Test_opencv {
public:
void save_img(std::string pic_name, cv::Mat pic, std::string path = "C:\\Users\\Administrator\\Desktop\\pic\\") {
std::string save_path = path + pic_name + ".jpg";
cv::imwrite(save_path, pic);
}
void image_show(cv::Mat pic) {
cv::imshow("result", pic);
cv::waitKey(0);
}
};
int main() {
Test_opencv test_opencv;
cv::Mat pic;
cv::Mat image;
image = cv::imread("C:\\Users\\Administrator\\Desktop\\grey.jpg", CV_LOAD_IMAGE_GRAYSCALE);// , CV_LOAD_IMAGE_COLOR);
//cv::Laplacian(image, pic, image.depth(), 3);
//cv::medianBlur(image, pic, 7);
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
cv::morphologyEx(image, pic, cv::MORPH_CLOSE, kernel, cv::Point(-1, -1), 3);
//test_opencv.image_show(pic);
test_opencv.save_img("morphologyEx", pic);
return 0;
}