栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【图像处理】c++使用opencv对图像进行形态学操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【图像处理】c++使用opencv对图像进行形态学操作

学习目标:使用opencv对图片进行形态学操作

文章目录
  • 形态学操作
  • 腐蚀(erode)和扩张(dilate)
  • 其他形态学操作

形态学操作
  • 腐蚀(erode)
  • 扩张(dilate)
  • 开运算(先erode后dilate)
  • 闭运算(先dilate后erode)
  • 形态梯度 (dilate - erode)
  • 顶帽 (原始图像减去开运算)
  • 黑帽 (闭运算减去闭运算)
腐蚀(erode)和扩张(dilate)
#include
#include
#include
#include

using namespace std;
using namespace cv;

// MORPH_RECT: 矩形框
// MORPH_CROSS: 十字架
// MORPH_ELLIPSE: 椭圆


Mat src, erosion_dst, dilation_dst;
int erosion_elem = 0;   // 0,1,2
int erosion_size = 2;
int dilation_elem = 0;  // 0,1,2
int dilation_size = 21;
void Erosion(int, void*);
void Dilation(int, void*);

int main(int, char** argv)
{
    src = imread("./1.jpg", IMREAD_COLOR);
    if (src.empty())
    {
        return -1;
    }
    namedWindow("Erosion Demo", 0);
    namedWindow("Dilation Demo", 0);
    moveWindow("Dilation Demo", src.cols, 0);
    Erosion(erosion_size, &erosion_elem);
    Dilation(dilation_size, &dilation_elem);
    waitKey(0);
    return 0;
}

void Erosion(int, void*)
{
    int erosion_type = 0;
    if (erosion_elem == 0) { erosion_type = MORPH_RECT; }
    else if (erosion_elem == 1) { erosion_type = MORPH_CROSS; }
    else if (erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }
    Mat element = getStructuringElement(erosion_type,
        Size(2 * erosion_size + 1, 2 * erosion_size + 1),
        Point(erosion_size, erosion_size));
    erode(src, erosion_dst, element);
    imshow("Erosion Demo", erosion_dst);
}

void Dilation(int, void*)
{
    int dilation_type = 0;
    if (dilation_elem == 0) { dilation_type = MORPH_RECT; }
    else if (dilation_elem == 1) { dilation_type = MORPH_CROSS; }
    else if (dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }
    Mat element = getStructuringElement(dilation_type,Size(2 * dilation_size + 1, 2 * dilation_size + 1),Point(dilation_size, dilation_size));
    dilate(src, dilation_dst, element);
    imshow("Dilation Demo", dilation_dst);
}

结果:

其他形态学操作
  • 开运算:MORPH_OPEN:2
  • 闭运算:MORPH_CLOSE:3
  • 形态梯度:MORPH_GRADIENT:4
  • 顶帽:MORPH_TOPHAT:5
  • 黑帽:MORPH_BLACKHAT:6
#include

#include
#include
#include

using namespace cv;
Mat src, dst;
int morph_elem = 2;
int morph_size = 21;
int morph_operator = 4;
const char* window_name = "Morphology Transformations Demo";
void Morphology_Operations(int, void*);

int main(int argc, char** argv)
{
    String imageName("./1.jpg"); // by default
    if (argc > 1)
    {
        imageName = argv[1];
    }
    src = imread(imageName, IMREAD_COLOR); // Load an image
    if (src.empty())
    {
        return -1;
    }
    namedWindow(window_name, 0); // Create window

 
    Morphology_Operations(0, 0);
    waitKey(0);
    return 0;
}

void Morphology_Operations(int, void*)
{
    // Since MORPH_X : 2,3,4,5 and 6
    int operation = morph_operator + 2;
    Mat element = getStructuringElement(morph_elem, Size(2 * morph_size + 1, 2 * morph_size + 1), Point(morph_size, morph_size));
    morphologyEx(src, dst, operation, element);
    imshow(window_name, dst);
}

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号