OpenCV(二十九):图像腐蚀

1.图像腐蚀原理

腐蚀操作的原理是将一个结构元素(也称为核或模板)在图像上滑动,并将其与图像中对应位置的像素进行比较。如果结构元素的所有像素与图像中对应位置的像素都匹配,那么该位置的像素值保持不变。如果结构元素的任何一个像素与图像中对应位置的像素不匹配,那么该位置的像素值被置为0(或其他指定的像素值),从而改变了图像的形状和结构。

2.图像腐蚀目的:

  • 去除图像中微小物体
  • 分离较近的两个物体

3.结构元素生成函数getStructuringElement()

Mat cv::getStructuringElement ( int shape,

Size ksize,

Point anchor = point(-1,-1)

  • shape:结构元素的种类。
  • ksize:结构元素的尺寸大小。
  • anchor:中心点的位置,默认参数为结构元素的几何中心点。

其中结构元素的类型参数:

4.图像腐蚀操作函数erode()

void cv::erode ( InputArray src,

OutputArray dst,

InputArray kernel,

Point anchor = Point(-1,-1),

int iterations = 1,

int cborderType = BORDER CONSTANT,

const Scalar & borderValue = morphologyDefaultBorderValue()

)

  • src:输入的待腐蚀图像,图像的通道数可以是任意的,但是图像的数据类型必须是CV_8U,CV _16U,CV_16S,CV_32F或CV_64F之一。
  • dst:腐蚀后的输出图像,与输入图像src具有相同的尺寸和数据类型。
  • kermel:用于腐蚀操作的结构元素,可以自己输入,也可以用getStructuringElement0)函数生成。
  • anchor:中心点在结构元素中的位置,默认参数为结构元素的几何中心点。
  • iterations:腐蚀的次数。
  • borderType:像素外推法选择标志。
  • borderValue:边界不变的边界值。

5.示例代码:

复制代码
//绘制包含区域函数
void drawState(Mat image, int number, Mat centroids, Mat stats, String string) {
    RNG rng(10086);
    vector<Vec4b> colors;
    for(int i=0;i<number;i++){
        //使用均匀分布的随机数确定颜色
        Vec4b vec4=Vec4b(rng.uniform(0,256),rng.uniform(0,256),rng.uniform(0,256),rng.uniform(0,256));
        colors.push_back(vec4);
    }
    //以不同颜色标记出不同的连通域
    for(int i=1;i<number;i++){
        //中心位置
        int center_x=centroids.at<double>(i,0);
        int center_y=centroids.at<double>(i,1);
        //矩形边框
        int x=stats.at<int>(i,CC_STAT_LEFT);
        int y=stats.at<int>(i,CC_STAT_TOP);
        int w=stats.at<int>(i,CC_STAT_WIDTH);
        int h=stats.at<int>(i,CC_STAT_HEIGHT);
        int area=stats.at<int>(i,CC_STAT_AREA);
        //中心位置绘制
        circle(image,Point(center_x,center_y),2,Scalar(0,255,0),2,8,0);
        //外接矩形
        Rect rect(x,y,w,h);
        rectangle(image,rect,colors[i],1,8,0);
        putText(image, format("%d",i),Point(center_x,center_y),FONT_HERSHEY_SIMPLEX,0.5,Scalar(255,0,255),1);
    }
    imwrite("/sdcard/DCIM/"+string+".png",image);
}

void Image_corrosion(Mat image){
    Mat img2;
    copyTo(image,img2,image);//克隆一个单独的图像,用于后期图像绘制
    Mat rice,riceBW;
    //将图像转成二值图像,用于统计连通域
    cvtColor(image,rice,COLOR_BGR2GRAY);
    threshold(rice,riceBW,50,255,THRESH_BINARY);

    Mat out,stats,centroids;
    //统计图像中连通域的个数
    int number= connectedComponentsWithStats(riceBW,out,stats,centroids,8,CV_16U);
    drawState(image,number,centroids,stats,"Uncorroded_connected");//绘制图像
    Mat strucr1= getStructuringElement(0,Size(3,3));//矩形结构元素
    //Mat strucr1= getStructuringElement(1,Size(3,3));//十字结构元素

    erode(riceBW,riceBW,strucr1);//对图像进行腐蚀
    number= connectedComponentsWithStats(riceBW,out,stats,centroids,8,CV_16U);
    drawState(img2,number,centroids,stats,"corroded_connected");
}
相关推荐
只是甲1 小时前
Text2SQL 系列博客 02:技术原理深度剖析 - 从自然语言到 SQL 的完整链路
人工智能·text2sql·nl2sql·ai agent·自助数据分析·data agent·agentic 数据洞察
懷淰メ1 小时前
【AI赋能】基于PyQt+YOLO+DeepSeek水上漂浮物检测系统(详细介绍)
人工智能·yolo·目标检测·计算机视觉·pyqt·漂浮物·水上漂浮物
EQUINOX11 小时前
【论文精读】| CLIP精读
大数据·人工智能
PC2005-cloud2 小时前
博文已索引但不展示:一次 Bing SEO 问题排查记录
服务器·人工智能
weixin_408099672 小时前
2026 图片去文字 API 实战:AI一键去除图片文字(附 Python / Java / PHP / JS 完整代码)
人工智能·api接口·图片去水印·石榴智能·ai图像修复·图片去文字
greenbbLV2 小时前
2026节日慰问品政策解读:合规标准升级与福利行业新趋势
人工智能·节日
奈斯先生Vector2 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
领麦微红外2 小时前
国产MEMS红外测温传感器:传感器+算法+产品级出厂标定一站式交付模式深度解读
人工智能·硬件工程·产品经理
mingo_敏3 小时前
DeepAgents : 检索(Retrieval)
人工智能·深度学习·langchain
微三云 - 廖会灵 (私域系统开发)3 小时前
消费即资产:积分增值异业联盟商业模式完整拆解(附落地逻辑、合规方案与盈利模型)
大数据·人工智能