两个函数,一个垂直投影分析,一个水平投影分析,输入src为要分析的图像,输出dst为投影分析的结果图,返回值vector<Mat>为根据波峰波谷切割出的图形
//垂直投影分析
vector<Mat> GetVerticalProjection(Mat src,Mat &dst)
{
vector<Mat> rois;
dst = Mat::zeros(src.size(), CV_8UC1);
vector<int> vectorV; //垂直投影
for (int i = 0;i < src.cols;i++)
{
Mat data = src.col(i);
int iCount = countNonZero(data);
vectorV.push_back(iCount);
}
vector<int>VUp;
vector<int>VDown;
//分析波峰波谷
for (int i = 1;i < vectorV.size();i++)
{
if (vectorV[i - 1] == 0 && vectorV[i] > 0)
VUp.push_back(i);
if (vectorV[i - 1] > 0 && vectorV[i] == 0)
VDown.push_back(i);
}
//绘制图像
for (int i = 0;i < vectorV.size();i++)
{
if (vectorV[i] != 0)
line(dst, Point(i, dst.rows), Point(i, dst.rows - vectorV[i]), Scalar(255));
}
//根据波峰波谷提取roi区域
for (int i &#