task-框线检测

还没成功

Posted by XushengLee on July 28, 2016

first assignment.

本次用到两个传送门 canny边缘检测 Hough

目的

把图表一类的东西中的表格线给识别出来,并标识出来.

(略?)失败的代码

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
using namespace std;
using namespace cv;
int main( )
{
    Mat srcImage = imread("/Users/mac/Pictures/form-2.jpg");  
    Mat midImage,dstImage;//临时变量和目标图的定义
    double scale=1024.0/srcImage.cols;
    printf("%lf",scale);
    Size dsize=Size(srcImage.cols*scale,srcImage.rows*scale);

    resize(srcImage,srcImage,dsize);    //对每张图进行尺寸resize,改为cols=1024


    //进行边缘检测和转化为灰度图
    Canny(srcImage, midImage, 50, 200, 3);//进行一此canny边缘检测
    cvtColor(midImage,dstImage, CV_GRAY2BGR);//转化边缘检测后的图为灰度图

    //进行霍夫线变换
    vector<Vec4i> lines;//定义一个矢量结构lines用于存放得到的线段矢量集合
    HoughLinesP(midImage, lines, 1, CV_PI/180, 100, 200, 5 );

    //依次在图中绘制出每条线段
    size_t i;
    for( i = 0; i < lines.size(); i++ )
    {
        Vec4i l = lines[i];
        line( dstImage, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(186,88,255), 1, CV_AA);
    }
    printf("%d",srcImage.cols);
    //显示原始图
    imshow("【原始图】", srcImage);

    //边缘检测后的图
    imshow("【边缘检测后的图】", midImage);

    //显示效果图
    imshow("【效果图】", dstImage);

    waitKey(0);
    imwrite("/Users/mac/Pictures/out-form-2.jpg", dstImage);
    return 0;
}

先用canny进行边缘检测,然后用霍夫线检测并画出直线.
但是,我在使用时要对于HoughLineP()这个函数中的七个参数进行调整才能得到很好的结果.否则,线就很不全.尤其是当图片角度不好时(斜线)

screenshoots

img img img img

bit of dispointment :(