📜  渐变| C++中OpenCV的形态转换(1)

📅  最后修改于: 2023-12-03 15:11:08.346000             🧑  作者: Mango

渐变

在计算机图像处理中,渐变(Gradient)指的是图像中像素值变化最大的方向和大小。渐变在图像处理中有着广泛的应用,如边缘检测、图像分割等。

OpenCV的形态转换

OpenCV是一款广泛使用于计算机视觉领域的开源计算机视觉库,具有很强的图像处理和计算能力。在OpenCV中,形态转换(Morphological Transformations)是图像处理中的一种重要的操作,可以通过改变图像的形状和大小来实现图像处理的目的。

代码演示

下面是基于OpenCV的C++代码演示如何进行形态转换并获取图像渐变:

#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat img = imread("test.jpg");

    // 定义结构元素
    Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));

    // 腐蚀操作
    Mat erosion_img;
    erode(img, erosion_img, kernel);

    // 膨胀操作
    Mat dilate_img;
    dilate(img, dilate_img, kernel);

    // 计算渐变
    Mat gradient_img;
    absdiff(dilate_img, erosion_img, gradient_img);

    // 显示图像
    imshow("origin image", img);
    imshow("gradient image", gradient_img);
    waitKey(0);

    return 0;
}
代码解释

1. 读取图像

Mat img = imread("test.jpg");

该行代码读取图片文件,并将其存储为Mat对象。

2. 定义结构元素

Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));

该行代码定义了一个矩形结构元素,大小为3x3,中心点坐标为(-1,-1)。

3. 腐蚀操作

Mat erosion_img;
erode(img, erosion_img, kernel);

该行代码对图像进行腐蚀操作,并将结果存储在erosion_img对象中。

4. 膨胀操作

Mat dilate_img;
dilate(img, dilate_img, kernel);

该行代码对图像进行膨胀操作,并将结果存储在dilate_img对象中。

5. 计算渐变

Mat gradient_img;
absdiff(dilate_img, erosion_img, gradient_img);

该行代码通过计算膨胀和腐蚀的差值来获取图像的渐变。

6. 显示图像

imshow("origin image", img);
imshow("gradient image", gradient_img);
waitKey(0);

该行代码将原始图像和渐变图像在屏幕上进行显示,并等待用户按下任意键。

Markdown代码块
```cpp
#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat img = imread("test.jpg");

    // 定义结构元素
    Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));

    // 腐蚀操作
    Mat erosion_img;
    erode(img, erosion_img, kernel);

    // 膨胀操作
    Mat dilate_img;
    dilate(img, dilate_img, kernel);

    // 计算渐变
    Mat gradient_img;
    absdiff(dilate_img, erosion_img, gradient_img);

    // 显示图像
    imshow("origin image", img);
    imshow("gradient image", gradient_img);
    waitKey(0);

    return 0;
}