目录
功能说明
使用vs2019创建MFC项目,利用OpenCv实现了9个图像处理功能。分别是模糊化,锐化,羽化,腐蚀,膨胀,边缘检测,灰度化,放大,缩小功能。利用MFC图形化界面,用户点击想要实现的功能按钮,即可实现对图片的处理。
原理简介
1.模糊化:
平滑,也称为模糊,是一种简单且经常使用的图像处理操作。要执行平滑操作,我们将对图像应用滤镜。最常见的滤波器类型是线性的,其中输出像素的值(即G(i ,j )被确定为输入像素值的加权和(即F(i + k ,j + l )):
h (k ,l )被称为内核,它只不过是过滤器的系数。它有助于将滤波器可视化为在图像上滑动的系数窗口。
Mat imageSource = imread("timg.jpg");
Mat imageResult = imageSource.clone();
RNG rng;
int randomNum;
int Number = 5;
for (int i = 0; i < imageSource.rows - Number; i++)
for (int j = 0; j < imageSource.cols - Number; j++)
{
randomNum = rng.uniform(0, Number);
imageResult.at<Vec3b>(i, j)[0] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[0];
imageResult.at<Vec3b>(i, j)[1] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[1];
imageResult.at<Vec3b>(i, j)[2] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[2];
}
imshow("模糊化效果", imageResult);
运行截图:
2.锐化:
锐化滤波器则使用邻域的微分作为算子,增大邻域间像素的差值,使图像的突变部分变的更加明显。锐化的作用是加强图像的边沿和轮廓。
Mat Kernel = (Mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(srcCopy, dst, srcCopy.depth(), Kernel);
运行截图:
3.羽化:
羽化值越大,朦胧范围越宽,羽化值越小,朦胧范围越窄。可根据你想留下图的大小来调节。
算法分析:
1、通过对rgb值增加额外的V值实现朦胧效果
2、通过控制V值的大小实现范围控制。
3、V = 255 * 当前点Point距中点距离的平方s1 / (顶点距中点的距离平方 *mSize)s2;
4、s1 有根据 ratio 修正 dx dy值。
for (int y = 0; y < heigh; y++)
{
uchar* imgP = img.ptr<uchar>(y);
uchar* dstP = dst.ptr<uchar>(y);
for (int x = 0; x < width; x++)
{
int b = imgP[3 * x];
int g = imgP[3 * x + 1];
int r = imgP[3 * x + 2];
float dx = centerX - x;
float dy = centerY - y;
if (width > heigh)
dx = (dx * ratio);
else
dy = (dy * ratio);
int dstSq = dx * dx + dy * dy;
float v = ((float