滤波、分割等预处理过程省略。 输入图像为灰度图,激光条纹水平走向。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5cd78bd39818480d92fda1ac764bbc08.png)
目录
几何中心法极值法细化法灰度重心法法向质心法Steger算法
几何中心法
检测出光条边界 l、h 后,把两边界的中间线(l + h)/2作为激光条纹的中心线。
#include
#include
int main(int argc, char** argv)
{
cv::Mat src_img = cv::imread("70.bmp", 0);
cv::Mat dst_img = src_img.clone();
cv::cvtColor(dst_img, dst_img, cv::COLOR_GRAY2RGB);
uchar *p = src_img.data;
std::vector pts;
for (size_t i = 0; i = 0 && y_max 0 ? 1 : 0;
int p7 = int(src_img.at(j + 1, i - 1))>0 ? 1 : 0;
int p8 = int(src_img.at(j, i - 1))>0 ? 1 : 0;
int p9 = int(src_img.at(j - 1, i - 1))>0 ? 1 : 0;
int np1 = p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9;
int sp2 = (p2 == 0 && p3 == 1) ? 1 : 0;
int sp3 = (p3 == 0 && p4 == 1) ? 1 : 0;
int sp4 = (p4 == 0 && p5 == 1) ? 1 : 0;
int sp5 = (p5 == 0 && p6 == 1) ? 1 : 0;
int sp6 = (p6 == 0 && p7 == 1) ? 1 : 0;
int sp7 = (p7 == 0 && p8 == 1) ? 1 : 0;
int sp8 = (p8 == 0 && p9 == 1) ? 1 : 0;
int sp9 = (p9 == 0 && p2 == 1) ? 1 : 0;
int sp1 = sp2 + sp3 + sp4 + sp5 + sp6 + sp7 + sp8 + sp9;
if (np1 >= 2 && np1 0 ? 1 : 0;
int p4 = int(src_img.at(j, i + 1)) > 0 ? 1 : 0;
int p5 = int(src_img.at(j + 1, i + 1)) > 0 ? 1 : 0;
int p6 = int(src_img.at(j + 1, i)) > 0 ? 1 : 0;
int p7 = int(src_img.at(j + 1, i - 1)) > 0 ? 1 : 0;
int p8 = int(src_img.at(j, i - 1)) > 0 ? 1 : 0;
int p9 = int(src_img.at(j - 1, i - 1)) > 0 ? 1 : 0;
int np1 = p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9;
int sp2 = (p2 == 0 && p3 == 1) ? 1 : 0;
int sp3 = (p3 == 0 && p4 == 1) ? 1 : 0;
int sp4 = (p4 == 0 && p5 == 1) ? 1 : 0;
int sp5 = (p5 == 0 && p6 == 1) ? 1 : 0;
int sp6 = (p6 == 0 && p7 == 1) ? 1 : 0;
int sp7 = (p7 == 0 && p8 == 1) ? 1 : 0;
int sp8 = (p8 == 0 && p9 == 1) ? 1 : 0;
int sp9 = (p9 == 0 && p2 == 1) ? 1 : 0;
int sp1 = sp2 + sp3 + sp4 + sp5 + sp6 + sp7 + sp8 + sp9;
if (np1 >= 2 && np1 |