我记得有种猫咪的毛发特征分类是金渐层,还是狗来着?记大不清了。
图像羽化专题-腐蚀渐层方法羽化
1. 图像处理前后结果展示
图像处理前
图像处理后
2. 腐蚀渐层羽化
腐蚀渐层羽化方法,本质是不同腐蚀图像的加权和。可使用相同权值,以不同大小的内核腐蚀,并叠加10次,权值为0.1;以不同大小的内核腐蚀,并叠加5次,权值为0.2;以不同大小的内核腐蚀并叠加4次,权值为0.25。
以腐蚀10次,并叠加10次为例。因为腐蚀内核大小不同,腐蚀程度不同,原图中每个泡泡的直径就不同,因为腐蚀了10次,所以权值就为0.1,多张与权值相乘之后的图像相加就会呈现中心亮、边缘模糊的效果。
3. 代码展示
#include <cv.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
#include <string>
#include <cstring>
#include <vector>
#include <time.h>
#include <windows.h>
#include <iostream>
#include <algorithm>
using namespace std;
using namespace cv;
void main()
{
Mat src;
src= imread("C:\\Users\\DELL\\Desktop\\bubble.jpg");
Mat dst;
cvtColor(src, dst, CV_BGR2GRAY);
int erode_size = 3;
Mat kernel;
Mat tempErode = Mat::zeros(dst.size(), dst.type());
Mat tempDst = Mat::zeros(dst.size(), dst.type());
int erodeTime = 10;
for (int i=1;i< erodeTime;i++)
{
kernel = getStructuringElement(MORPH_RECT, Size(2*i* erode_size + 1, 2 * i* erode_size + 1));
erode(dst, tempErode, kernel);
tempDst = tempDst + 0.1*tempErode;
}
dst = 0;
dst = tempDst + 0.1*dst;
imwrite("C:\\Users\\DELL\\Desktop\\erodeBubble.jpg", dst);
}