由于要做图像的处理,所以最近在学习Opencv的相关知识,学习了Opencv中的Mat对象,查阅了网上的资料,了解了相关知识。现在实现了一个使用Mat对象来进行图像的水平投影与垂直投影,并在此基础之上,实现了字符的切分。现在将相关代码贴出,一来可以供大家参考并指正错误,而来也为的是防止忘记了相关知识。以下就是程序的代码,欢迎大家指正错误。
#include
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include
#include
using namespace cv;
using namespace std;
vector horizontalProjectionMat(Mat srcImg)//水平投影
{
Mat binImg;
blur(srcImg, binImg, Size(3, 3));
threshold(binImg, binImg, 0, 255, CV_THRESH_OTSU);
int perPixelValue = 0;//每个像素的值
int width = srcImg.cols;
int height = srcImg.rows;
int* projectValArry = new int[height];//创建一个储存每行白色像素个数的数组
memset(projectValArry, 0, height * 4);//初始化数组
for (int col = 0; col < height; col++)//遍历每个像素点
{
for (int row = 0; row < width; row++)
{
perPixelValue = binImg.at(col, row);
if (perPixelValue == 0)//如果是白底黑字
{
projectValArry[col]++;
}
}
}
Mat horizontalProjectionMat(height, width, CV_8UC1);//创建画布
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
perPixelValue = 255;
horizontalProjectionMat.at(i, j) = perPixelValue;//设置背景为白色
}
}
for (int i = 0; i < height; i++)//水平直方图
{
for