一,原图
二,效果图
三,源代码
//垂直方向投影
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);