磐赢 2015-08-18 07:58 采纳率: 0%
浏览 3148

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;
}
但最后得到的坐标点并不正确。求助

  • 写回答

1条回答 默认 最新

  • 嵌云阁主 2015-08-18 13:35
    关注

    Hough检测直线不行吗 ?

    评论

报告相同问题?

悬赏问题

  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员