opencv检测图片中表格的左上角坐标

如下一张图片,我想得到这个图片中表格左上角的坐标。
图片说明
对此图片纠偏与二值化后,使用cornerHarris查找到的角点有很多。如果图片的边缘部分有污点,得到的角点会更多。虽然表格左上角的坐标在角点中,但很难筛选出来。不知道各位大侠有什么好的方法。以下代码是我写的关于查找的部分。
Point FindTableLUCorner(Mat srcImg)
{
//---------------------------【1】定义一些局部变量-----------------------------

Mat dstImage;//目标图

Mat normImage;//归一化后的图
Mat g_srcImage1;
// g_srcImage1 = srcImg.clone();
Point p = Point(9999, 9999);
int thresh = 80; //当前阈值

//---------------------------【2】初始化---------------------------------------

//置零当前需要显示的两幅图,即清除上一次调用此函数时他们的值

dstImage = Mat::zeros(srcImg.size(), CV_32FC1);
//---------------------------【3】正式检测-------------------------------------

//进行角点检测

cornerHarris(srcImg, dstImage, 2, 3, 0.04, BORDER_DEFAULT);
// 归一化与转换

normalize(dstImage, normImage, 0, 255, NORM_MINMAX, CV_32FC1, Mat());
//---------------------------【4】进行绘制-------------------------------------

// 将检测到的,且符合阈值条件的角点绘制出来

printf("\n rows:%d,cols:%d", normImage.rows, normImage.cols);
int sum = 0, count = 0;
for (int j = 0; j < normImage.rows; j++)
{
for (int i = 0; i < normImage.cols; i++)
{
if ((int)normImage.at(j, i) > thresh + 80)
{
count++;
sum = sum + (int)normImage.at(j, i);
}
}
}
printf("\n和值:%d,平均值:%d,阀值:%d", sum, (int)sum / count, thresh + 80);
for (int j = 0; j < normImage.rows; j++)
{
for (int i = 0; i < normImage.cols; i++)
{
if ((int)normImage.at(j, i) > thresh + 80)
{
if (p.x>i || p.y > j)
{
p.x = i;
p.y = j;
}
//circle(g_srcImage1, Point(i,j), 5, Scalar(0, 0, 255), 2, 8, 0);
}
}
}
/*circle(g_srcImage1,p, 5, Scalar(0, 0, 255), 2, 8, 0);
imshow("11111", g_srcImage1);
waitKey(0);*/
return p;
}
但最后得到的坐标点并不正确。求助

查看全部
volf420
磐赢
2015/08/18 07:58
  • 图片
  • opencv
  • 点赞
  • 收藏
  • 回答
    私信

1个回复