opencv计算图像的水平投影和垂直投影
本文介绍使用opencv实现计算一幅图像的水平投影和垂直投影,代码如下:
class HorizontalProjection
{
private:int maxLine;//255最大行位置int maxNum;//255最多的数目int minLine;//0最大行位置int minNum;//0最多的数目
public:HorizontalProjection();//构造函数cv::Mat getHorProjImage(const cv::Mat &image, int threshold);//计算图像的水平投影,并返回一幅图像
};//构造函数
HorizontalProjection::HorizontalProjection()
{maxLine = 0;//255最大行位置maxNum = 0;//255最多的数目minLine = 0;//0最大行位置minNum = 0;//0最多的数目
}//计算图像的水平投影,并返回一幅图像
cv::Mat HorizontalProjection::getHorProjImage(const cv::Mat &image, int threshold)
{cv::Mat matTmp = image.clone();if (image.channels() > 1){cvtColor(matTmp, matTmp, CV_RGB2GRAY);//彩色图转为灰度图}maxLine = 0, maxNum = 0;//重置255最大数目和最大行minLine = 0, minNum = matTmp.cols;//重置255最小数目和最小行int height = matTmp.rows, width = matTmp.cols;//图像的高和宽int tmp = 0;//保存当前行的255数目int *projArray = new int[height];//保存每一行255数目的数组cv::threshold(matTmp, matTmp, threshold, 255, CV_THRESH_BINARY);//对图形进行二值化处理//循环访问图像数据,查找每一行的255点的数目for (int i = 0; i < height; ++i){tmp = 0;for (int j = 0; j < width; ++j){if (matTmp.at<uchar>(i, j) == 255){++tmp;}}projArray[i] = tmp;if (tmp > maxNum){maxNum = tmp;maxLine = i;}if (tmp < minNum){minNum = tmp;minLine = i;}}//创建并绘制水平投影图像cv::Mat projImg(height, width, CV_8U, cv::Scalar(255));for (int i = 0; i < height; ++i){cv::line(projImg, cv::Point(width - projArray[i], i), cv::Point(width - 1, i), cv::Scalar::all(0));}delete[] projArray;//删除new数组return projImg;
}
结果如下:
水平投影图:
垂直投影的代码如下:
class VerticalProjection
{
private:int maxCol;//255最大行位置int maxNum;//255最多的数目int minCol;//0最大行位置int minNum;//0最多的数目
public:VerticalProjection();//构造函数cv::Mat getVerProjImage(const cv::Mat &image, int threshold);//计算图像的水平投影,并返回一幅图像
};//构造函数
VerticalProjection::VerticalProjection()
{maxCol= 0;//255最大行位置maxNum = 0;//255最多的数目minCol = 0;//0最大行位置minNum = 0;//0最多的数目
}//计算图像的水平投影,并返回一幅图像
cv::Mat VerticalProjection::getVerProjImage(const cv::Mat &image, int threshold)
{cv::Mat matTmp = image.clone();if (image.channels() > 1){cvtColor(matTmp, matTmp, CV_RGB2GRAY);//彩色图转为灰度图}if (threshold == -1){threshold = GetThresholdByOtsu(matTmp);//使用大津算法计算阈值}maxCol = 0, maxNum = 0;//重置255最大数目和最大行minCol = 0, minNum = matTmp.rows;//重置255最小数目和最小行int height = matTmp.rows, width = matTmp.cols;//图像的高和宽int tmp = 0;//保存当前行的255数目int *projArray = new int[width];//保存每一行255数目的数组cv::threshold(matTmp, matTmp, threshold, 255, CV_THRESH_BINARY);//对图形进行二值化处理cv::namedWindow("matTmp", 0);cv::imshow("matTmp", matTmp);//循环访问图像数据,查找每一行的255点的数目for (int col = 0; col < width; ++col){tmp = 0;for (int row = 0; row < height; ++row){if (matTmp.at<uchar>(row, col) == 255){++tmp;} }projArray[col] = tmp;if (tmp > maxNum){maxNum = tmp;maxCol = col;}if (tmp < minNum){minNum = tmp;minCol = col;}}//创建并绘制垂直投影图像cv::Mat projImg(height, width, CV_8U, cv::Scalar(255));for (int col = 0; col < width; ++col){cv::line(projImg, cv::Point(col, height - projArray[col]), cv::Point(col, height - 1), cv::Scalar::all(0));}delete[] projArray;//删除new数组return projImg;
}
结果如下:
opencv计算图像的水平投影和垂直投影相关推荐
- C++ opencv计算图像的水平投影,并返回一幅图像
效果图 输入图像 输出图像 代码 //计算图像的水平投影,并返回一幅图像 cv::Mat getVerProjImage(const cv::Mat &image) {cv::Mat matT ...
- opencv学习---计算图像的水平积分投影和垂直积分投影
opencv学习---计算图像的水平积分投影和垂直积分投影 标签: opencv水平积分投影垂直积分投影 2016-12-07 18:48 1806人阅读 评论(1) 收藏 举报 分类: opencv ...
- opencv java水平投影_使用OpenCv中Mat进行水平投影与垂直投影并实现字符切分
由于要做图像的处理,所以最近在学习Opencv的相关知识,学习了Opencv中的Mat对象,查阅了网上的资料,了解了相关知识.现在实现了一个使用Mat对象来进行图像的水平投影与垂直投影,并在此基础之上 ...
- OpenCV 实现图片的水平投影与垂直投影,并进行行分割
前言:对于印刷体图片来说,进行水平投影和垂直投影可以很快的进行分割,本文在OpenCV中如何进行水平投影和垂直投影通过代码进行说明. 水平投影:二维图像在y轴上的投影 垂直投影:二维图像在x轴上的投影 ...
- [机器视觉]gocv图像水平投影和垂直投影
文章目录 1. 水平投影和垂直投影 2. 投影原理 3. 代码实现 1. 水平投影和垂直投影 图像水平投影和垂直投影效果如下图所示: 原图: 水平投影: 垂直投影: 2. 投影原理 投影原理很简单,比 ...
- 图像水平投影和垂直投影,图像分割
图像水平投影和垂直投影,图像分割 // opencv.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // //#pragma comment(lib , ...
- 使用Python、OpenCV翻转图像(水平、垂直、水平垂直翻转)
使用Python.OpenCV翻转图像(水平.垂直.水平垂直翻转) 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python.OpenCV翻转图像,类似于cv2.rotate(). 沿y轴水 ...
- 使用Python,OpenCV计算图像直方图(cv2.calcHist)
使用Python,OpenCV计算图像直方图(cv2.calcHist 1. 效果图 2. 原理 2.1 什么是图像直方图? 2.2 计算直方图 2.3 可视化蒙版区域 3. 源码 参考 这篇博客将介 ...
- python图片相似度计算_python Opencv计算图像相似度过程解析
这篇文章主要介绍了python Opencv计算图像相似度过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.相关概念 一般我们人区分谁是谁 ...
最新文章
- mysql 5.5.安装包_Mysql的详细安装教程!亲测可用!!!
- php mvc多态实例,asp.net mvc-多态模型绑定
- “约见“面试官系列之各系列目录汇总(建议学习收藏)
- HDU 4920 Matrix multiplication(矩阵相乘)
- WinForm始终置顶并获取焦点
- 王道 —— 操作系统的运行机制和体系结构
- 【BootStrap笔记】BootStrap+css写旅游网页面
- mysql在网页上显示乱码_计算机毕设答辩时网页报错怎么办
- Spark实现jieba中文分词(scala)
- 计算机怎样用PS抠婚纱图,用PS应该怎样抠出透明婚纱照片
- β版本展示博客-第二组(攻城喵组)
- python制作ico图标_python使用PythonMagic k将jpg图片转换成ico图片的方法
- 适合创业起步看的书推荐
- 【STM32F407开发板用户手册】第7章 STM32F407下载和调试方法(IAR8)
- Git 入门到精通,大厂程序员呕心沥血强力推荐
- 各个数据库中,查询前n条记录的方法
- 【深入理解TcaplusDB技术】TcaplusDB机器如何初始化和上架
- APP架构一般性分类
- 计算机网络复习——第四章:网络层——数据平面
- N8个E6诺基亚近期搞什么怪?