opencv java水平投影_使用OpenCv中Mat进行水平投影与垂直投影并实现字符切分

本文介绍了如何使用OpenCV的Mat对象进行图像的水平和垂直投影,以此实现字符的切分。通过示例代码展示了先垂直投影再水平投影的方法,以确保准确分割出字符。同时还探讨了先水平后垂直切分可能导致的问题。
摘要由CSDN通过智能技术生成

由于要做图像的处理,所以最近在学习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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值