水平投影切割
#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
IplImage * src = cvLoadImage("img1.jpg");
IplImage *dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
IplImage *img = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
cvThreshold(src, dst, 100, 255, CV_THRESH_BINARY);
IplImage* painty = cvCreateImage(cvGetSize(dst), IPL_DEPTH_8U, 1);
cvZero(painty);
int* h = new int[dst->height];
memset(h, 0, dst->height * 4);
int x, y;
CvScalar s, t;//可以用来存放4个double数值的数组,一般用来存放像素值(不一定是灰度值哦)的,最多可以存放4个通道的
for (y = 0; y<dst->height; y++)
{
for (x = 0; x<dst->width; x++)
{
s = cvGet2D(dst, y, x);
if (s.val[0] == 0)
h[y]++;
}
}
for (y = 0; y<dst->height; y++)
{
for (x = 0; x<h[y]; x++)
{
t.val[0] = 255;
cvSet2D(painty, y, x, t);
}
}
vector<Mat> roiList;//用于储存分割出来的每个字符
int startIndex = 0;//记录进入字符区的索引
int endIndex = 0;//记录进入空白区域的索引
bool inBlock = false;//是否遍历到了字符区内