河南建筑网站,网站规划项目与设计实例,无锡网页设计培训公司,有没有可以看的网址目录
1.介绍连通域分割
2.像素领域介绍
3.两遍法分割连通域
4.连通域分割函数 1.介绍连通域分割 连通域分割是一种图像处理技术#xff0c;用于将图像中的相邻像素组成的区域划分为不同的连通域。这些像素具有相似的特性#xff0c;如相近的灰度值或颜色。连通域分割可以…目录
1.介绍连通域分割
2.像素领域介绍
3.两遍法分割连通域
4.连通域分割函数 1.介绍连通域分割 连通域分割是一种图像处理技术用于将图像中的相邻像素组成的区域划分为不同的连通域。这些像素具有相似的特性如相近的灰度值或颜色。连通域分割可以用于物体检测、图像分割、目标跟踪等应用。
2.像素领域介绍 在连通域分割中常用的领域关系有四领域和八领域。
四领域表示一个像素与其上下左右四个相邻像素连接。八领域表示一个像素与其上、下、左、右、左上、右上、左下、右下八个相邻像素连接。 3.两遍法分割连通域
橙色区域为目标物体即前景像素
1,第一遍扫描
a. 从上往下从左往右遍历图像的每个像素检查其是否属于前景像素包括目标物体。如果是前景像素则进行以下操作 检查其上方和左方的像素 1 如果都是前景像素 则取两者中像素的标签的最小值作为当前像素的标签。 2如果只有一个是前景像素则将当前像素标记为该前景像素的标签。 3 如果两个方向都没有前景像素则将当前像素标记为新的数字标签。数字标签 从1开始然后不断1递增
第一遍扫描的结果 2.第二遍扫描
a. 将同一连通区域内的不同相邻标签合并取标签的最小值使每个连通域只有一个标签。
第二遍扫描结果 4.连通域分割函数 4.1只分割连通域的函数 connectedComponents() int cv::connectedComponents ( InputArray image, OutputArray labels, int connectivity 8, int ltype CV_32S image:待标记不同连通域的图像单通道数据类型必须为CV 8U。labels:标记不同连通域后的输出图像与输入图像具有相同的尺寸。connectivity:标记连通域时使用的邻域种类4表示4-邻域8表示8-邻域默认参数为8。ltype:输出图像的数据类型目前支持CV 32S和CV 16U两种数据类型默认参数为CV 32S 示例代码
void connect_f(Mat image){Mat rice,riceBW;//将图像转成二值图像用于统计连通域cvtColor(image,rice,COLOR_BGR2GRAY);threshold(rice,riceBW,50,255,THRESH_BINARY);//生成随机颜色用于区分不同连通域RNG rng(10086);Mat out;int number connectedComponents(riceBW,out,8,CV_16U);//统计图像中连通域的个数vectorVec4b colors;for(int i0;inumber;i){//使用均匀分布的随机数确定颜色Vec4b vec4Vec4b(rng.uniform(0,256),rng.uniform(0,256),rng.uniform(0,256),rng.uniform(0,256));colors.push_back(vec4);}//以不同颜色标记出不同的连通域Mat resultMat::zeros(rice.size(),image.type());int wresult.cols;int hresult.rows;for(int row0;rowh;row){for(int col0;colw;col){int labelout.atuint16_t(row,col);if(label0){//背景的黑色不改变continue;}result.atVec4b(row,col)colors[label];}}//显示结果imwrite(/sdcard/DCIM/result.png,result);
} 4.2分割并统计连通域信息的函数connectedComponentsWithStats() int cv::connectedComponentsWithStats ( InputArray image, OutputArray labels, OutputArray stats, OutputArray centroids, int connectivity 8, int ltype CV_32S ) image:待标记不同连通域的图像单通道数据类型必须为CV_8U。labels:标记不同连通域后的输出图像与输入图像具有相同的尺寸。stats:不同连通域的统计信息矩阵矩阵的数据类型为CV 32S。阵中第i行是标签为i的连通域的统计特性。centroids:每个连通域的质心坐标数据类型为CV 64F。connectivity:标记连通域时使用的邻域种类4表示4-邻域8表示8-邻域默认参数值为8。ltype: 输出图像的数据类型目前只支持CV 32S和CV 16U这两种数据类型默认参数值为CV_32S。
示例代码 //统计连通域信息
void connectedComponentsWithStats_f(Mat image){Mat rice,riceBW;//将图像转成二值图像用于统计连通域cvtColor(image,rice,COLOR_BGR2GRAY);threshold(rice,riceBW,50,255,THRESH_BINARY);Mat stats,centroids,out;int number connectedComponentsWithStats(riceBW,out,stats,centroids,8,CV_16U);vectorVec4b colors;RNG rng(10086);for(int i0;inumber;i){//使用均匀分别的随机数确定颜色Vec4b vec4Vec4b(rng.uniform(0,256),rng.uniform(0,256),rng.uniform(0,256),rng.uniform(0,256));colors.push_back(vec4);}//以不同颜色标记出不同的连通域for(int i1;inumber;i){//中心位置int center_xcentroids.atdouble(i,0);int center_ycentroids.atdouble(i,1);//矩形边框int xstats.atint(i,CC_STAT_LEFT);int ystats.atint(i,CC_STAT_TOP);int wstats.atint(i,CC_STAT_WIDTH);int hstats.atint(i,CC_STAT_HEIGHT);int areastats.atint(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(0,0,255),1);ostringstream ss;ss number: i,area:area std::endl;}//显示结果imwrite(/sdcard/DCIM/image_Markers.png,image);
}