ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

OpenCV(C++)学习笔记(二)----二值图像处理

2021-10-04 23:00:51  阅读:149  来源: 互联网

标签:阈值 OutputArray int C++ 像素 ---- OpenCV CV cv


OpenCV(C++)学习笔记(二)----二值图像处理

文章目录

阈值化

请添加图片描述

OpenCV中阈值函数

double cv::threshold(InputArray src,
                    OutputArray dst,
                    double thresh,
                    double maxval,
                    int type)

OpenCV种自适应阈值函数

void cv::adaptiveThreshold(InputArray src,
                          OutputArray dst,
                          double maxValue,
                          int adaptiveMethod,
                          int thresholdType,
                          int blockSize,
                          double C)

tips:进行自动阈值寻找时输入图像为灰度图,手动阈值寻找时可为三通道图

自适应方法

OTSU阈值法

算法流程为:

请添加图片描述

其中类内方差的计算方法为:

现在任意选取一个灰度值 t,则可以将这个直方图分成前后两部分。这两部分分别为 a 和 b。对应的就是前景和背景。这两部分各自的平均值成为 Ma 和 Mb。a部分里的像素数占总像素数的比例记作 Pa,b部分里的像素数占总像素数的比例记作 Pb。
则类间方差定义为:
I C V = P a ∗ ( M a − M ) 2 + P b ∗ ( M b − M ) 2 ICV=Pa∗(Ma−M)2+Pb∗(Mb−M)2 ICV=Pa∗(Ma−M)2+Pb∗(Mb−M)2

Triangle阈值法—三角法

先构建出灰度直方图,然后把最高点和右侧最低点做辅助线连接起来,如下图

请添加图片描述

当α和β值都为45°,直线d与做的辅助线垂直时该点对应的灰度值为阈值T

腐蚀与膨胀

腐蚀

腐蚀定义:

用结构元素窗口区域的最小像素值替代中心像素值

void cv::erode(InputArray src,
              OutputArray dst,
              InputArray kernel,
              Point anchor=Point(-1,-1),
              int iterations=1,
              int borderType=BORDER_CONSTANT,
              const Scalar& borderValue=morphologyDefaultBorderValue()
              )

其中kernel为结构元素,iteration为执行腐蚀的次数

膨胀

膨胀定义:

用结构元素窗口区域的最大像素值替代中心像素值

void cv::dilate(InputArray src,
              OutputArray dst,
              InputArray kernel,
              Point anchor=Point(-1,-1),
              int iterations=1,
              int borderType=BORDER_CONSTANT,
              const Scalar& borderValue=morphologyDefaultBorderValue()
              )

其中kernel为结构元素,iteration为执行腐蚀的次数

开运算与闭运算

开运算:对图像执行先腐蚀后膨胀操作

开运算=腐蚀+膨胀(op=MORPH_OPEN)

闭运算:对图像执行先膨胀后腐蚀操作

闭运算:膨胀+腐蚀(op=MORPH_CLOSE)

void cv::morphologyEx(InputArray src,
                     OutputArray dst,
                     int op,
                     InputArray kernel,
                     Point anctor=Point(-1,-1),
                     int iteration=1,
                     int borderType=BORDER_CONSTANT,
              		 const Scalar& borderValue=morphologyDefaultBorderValue()
              		 )

连通区域分析

两步法

1.对输入图像进行扫描,扫描到前景像素时进行标记

2.寻找相邻像素的标记(上方和左侧),若有标记则该像素标记为相邻像素一样的标记。若相邻的标记不同则标记为较小的

3.将连通区域的标记统(第一个联通区域全部像素标记为1,第二个区域全部标记为2等等)

int cv::connectedComponents (
                            cv::InputArrayn image, // input 8-bit single-channel (binary)
                            cv::OutputArray labels, // output label map
                            int connectivity = 8, // 4- or 8-connected components
                            int ltype = CV_32S // Output label type (CV_32S or CV_16U)
                            )
int cv::connectedComponentsWithStats (
                            cv::InputArrayn image, // input 8-bit single-channel (binary)
                            cv::OutputArray labels, // output label map
                            cv::OutputArray stats, // Nx5 matrix (CV_32S) of statistics:
                            // [x0, y0, width0, height0, area0;
                            // ... ; x(N-1), y(N-1), width(N-1),
                            // height(N-1), area(N-1)]
                            cv::OutputArray centroids, // Nx2 CV_64F matrix of centroids:
                            // [ cx0, cy0; ... ; cx(N-1), cy(N-1)]
                            int connectivity = 8, // 4- or 8-connected components
                            int ltype = CV_32S // Output label type (CV_32S or CV_16U)
                        )

轮廓

OpenCV中的轮廓提取函数

void cv::findContours(InputOutputArray image,
                     OutputArrayOfArrays contours,//vector
                     OutputArray hierarchy,//层次信息
                     int mode,
                     int method,//提取轮廓的方式
                     Point offset=point())

Blob检测

Blob定义:Blob是图像中一组相互连通的像素点,它们具有一些共通的属性。

标签:阈值,OutputArray,int,C++,像素,----,OpenCV,CV,cv
来源: https://blog.csdn.net/qq_50444970/article/details/120609369

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有