OpenCV求垂直投影,并画出垂直投影图

一,原图
这里写图片描述
二,效果图
这里写图片描述
三,源代码

//垂直方向投影
Mat VerticalProjection(Mat srcImageBin)//垂直积分投影  
{
    Mat lineImage(1, srcImageBin.cols, CV_8UC1, cv::Scalar(0, 0, 0));
    int value;
    for (int i = 0; i < srcImageBin.cols; i++)
    {
        int icount = 0;
        for (int j = 0; j < srcImageBin.rows; j++)
        {
            value = srcImageBin.at<uchar>(j, i);
            if (value == 0)
            {
                icount++; //统计每列的白色像素点   
            }
        }
        lineImage.at<uchar>(0, i) = icount;
    }
    return lineImage;
}
    Mat image = imread("D:\\sxl\\处理图片\\斜体分割\\斜体.png", 0);//读取图片  
    Mat BinImg;                                          //二值化图像
    threshold(image, BinImg, 200, 255, CV_THRESH_BINARY);
    //imshow("22", BinImg);

    //获取自定义核,对白色进行膨胀
    Mat element = getStructuringElement(MORPH_RECT, Size(1, 1));
    Mat out,out2;
    //对白色进行膨胀操作
    //dilate(BinImg, out, element);
    //imshow("23", out);
    //对白色进行腐蚀操作
    erode(BinImg, out2, element);
    imshow("24", out2);

    //--------------投影计算------------------------------------------------
    Mat lineImg(1, image.cols, CV_8UC1, cv::Scalar(0, 0, 0));          
    lineImg = VerticalProjection(BinImg);
    //--------------投影计算------------------------------------------------

    //--------------创建并绘制垂直投影图像----------------------------------
    cv::Mat projImg(image.rows, image.cols, CV_8U, cv::Scalar(255));

    for (int col = 0; col < image.cols; ++col)
    {
        cv::line(projImg, cv::Point(col, image.rows - lineImg.at<uchar>(0, col)), cv::Point(col, image.rows - 1), cv::Scalar::all(0));
    }
    //--------------创建并绘制垂直投影图像----------------------------------

    imshow("25", projImg);
    waitKey(0);

猜你喜欢

转载自blog.csdn.net/sxlsxl119/article/details/81096763