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:进行自动阈值寻找时输入图像为灰度图,手动阈值寻找时可为三通道图
算法流程为:
其中类内方差的计算方法为:
现在任意选取一个灰度值 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
先构建出灰度直方图,然后把最高点和右侧最低点做辅助线连接起来,如下图
当α和β值都为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是图像中一组相互连通的像素点,它们具有一些共通的属性。