OpenCV——腐蚀

1.效果展示

2.处理函数

CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1));


在下面路径下找到函数的具体实现(在modules文件夹下搜索文字内容)

C:\Program Files (x86)\opencv\sources\modules\imgproc\src\morph.cpp


本次只是顺带找到openCV库中方法的具体实现,暂时不看方法中的具体实现过程

函数的实现:

cv::Mat cv::getStructuringElement(int shape, Size ksize, Point anchor)
{
    int i, j;
    int r = 0, c = 0;
    double inv_r2 = 0;
    CV_Assert( shape == MORPH_RECT || shape == MORPH_CROSS || shape == MORPH_ELLIPSE );
    anchor = normalizeAnchor(anchor, ksize);
    if( ksize == Size(1,1) )
        shape = MORPH_RECT;
    if( shape == MORPH_ELLIPSE )
    {
        r = ksize.height/2;
        c = ksize.width/2;
        inv_r2 = r ? 1./((double)r*r) : 0;
    }
    Mat elem(ksize, CV_8U);
    for( i = 0; i < ksize.height; i++ )
    {
        uchar* ptr = elem.data + i*elem.step;
        int j1 = 0, j2 = 0;
        if( shape == MORPH_RECT || (shape == MORPH_CROSS && i == anchor.y) )
            j2 = ksize.width;
        else if( shape == MORPH_CROSS )
            j1 = anchor.x, j2 = j1 + 1;
        else
        {
            int dy = i - r;
            if( std::abs(dy) <= r )
            {
                int dx = saturate_cast<int>(c*std::sqrt((r*r - dy*dy)*inv_r2));
                j1 = std::max( c - dx, 0 );
                j2 = std::min( c + dx + 1, ksize.width );
            }
        }
        for( j = 0; j < j1; j++ )
            ptr[j] = 0;
        for( ; j < j2; j++ )
            ptr[j] = 1;
        for( ; j < ksize.width; j++ )
            ptr[j] = 0;
    }
    return elem;
}



膨胀和腐蚀是图像处理中常用的操作,可以通过OpenCV的相关API来实现。膨胀操作可以将图像中的亮区域扩张,而腐蚀操作可以将图像中的暗区域缩小。 在OpenCV中,可以使用函数cv::dilate来实现膨胀操作。该函数的参数包括输入图像、输出图像、膨胀的结构单元、锚点位置、膨胀的次数等。其中,结构单元可以是一个自定义的矩形,也可以使用函数getStructuringElement创建。 以下是一个实现膨胀和腐蚀的代码示例: ```cpp #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { Mat image1 = imread("F:/photo/qx.jpg", 1); namedWindow("input_picture1"); imshow("input_picture1", image1); Mat image2; Mat image3; cvtColor(image1, image2, COLOR_RGB2GRAY); namedWindow("input_picture2"); imshow("input_picture2", image2); threshold(image2, image3, 65, 255, THRESH_BINARY); namedWindow("input_picture3"); imshow("input_picture3", image3); Mat eroded; erode(image3, eroded, Mat()); namedWindow("erode"); imshow("erode", eroded); Mat dilated; dilate(image3, dilated, Mat()); namedWindow("dilate"); imshow("dilate", dilated); waitKey(0); return 0; } ``` 上述代码中,首先读取一张图像,并将其转换为灰度图像。然后通过阈值处理得到二值图像。接下来,分别对二值图像进行腐蚀和膨胀操作,并显示处理结果。可以根据实际需要调整参数和操作顺序。 希望对你有帮助!如果有更多问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [13、OpenCV形态学操作——膨胀与腐蚀](https://blog.csdn.net/phinoo/article/details/113105119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [OpenCV图像处理学习十,图像的形态学操作——膨胀腐蚀](https://blog.csdn.net/weixin_44651073/article/details/126321876)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值