模式识别中精确定位之垂直和水平投影
在模式识别中常用垂直投影和水平投影对目标物进行精确投影,以便于后期的分割。
示例:
(1) (2) (3)
对上图一中“静”精确定位,字体行书刚好将它为连通。(若如不是连笔,后期分割可能将“青”和“争”分开)
从图(2)可知:从第三白色部分即可定位出“静”字的宽度,
从图(3):即可定位出“静”字的高度。
垂直投影和水平投影代码:
<pre name="code" class="cpp">// Vertical_gray_projection.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int _tmain(int argc, _TCHAR* argv[])
{IplImage * src=cvLoadImage("1.bmp");IplImage *dst = cvCreateImage(cvGetSize(src), 8, 1);IplImage *img = cvCreateImage(cvGetSize(src), 8, 1);cvSmooth(src,src,CV_BLUR,3,3,0,0);cvCvtColor(src,img,CV_BGR2GRAY);cvThreshold(img,dst,50,255,CV_THRESH_BINARY);IplImage* paintx=cvCreateImage( cvGetSize(dst),IPL_DEPTH_8U, 1 );IplImage* painty=cvCreateImage( cvGetSize(dst),IPL_DEPTH_8U, 1 );cvZero(paintx);cvZero(painty);int* v=new int[dst->width];int* h=new int[dst->height];memset(v,0,dst->width*4);memset(h,0,dst->height*4);int x,y;CvScalar s,t;//可以用来存放4个double数值的数组,一般用来存放像素值(不一定是灰度值哦)的,最多可以存放4个通道的/*typedef struct CvScalar{double val[4];}CvScalar;*///垂直投影for(x=0;x<dst->width;x++){for(y=0;y<dst->height;y++){s=cvGet2D(dst,y,x); //cvGet2D() 的函数原型是 : CvScalar cvGet2D (const CvArr * arr, int idx0, int idx1); //函数返回的是一个CvScalar 容器,其参数中也有两个方向的坐标,//但跟我们平常习惯的坐标不一样的是,idx0代表是的行,即高度,对应于我们平常坐标系的y,//idx1代表的是列,即宽度,对应于我们平常坐标系的x,cvSet2D() 也类似。 //printf("area == %lf\n",s);if(s.val[0]==0)v[x]++; } }for(x=0;x<dst->width;x++){for(y=0;y<v[x];y++){ t.val[0]=255;cvSet2D(paintx,y,x,t);} }//水平投影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); } }cvNamedWindow("二值图像",1);cvNamedWindow("垂直投影",1);cvNamedWindow("水平投影",1);cvShowImage("二值图像",dst);cvShowImage("垂直投影",paintx);cvShowImage("水平投影",painty);cvWaitKey(0);cvDestroyAllWindows();cvReleaseImage(&dst);cvReleaseImage(&paintx);cvReleaseImage(&painty);return 0;
}
效果图:上图(1)(2)(3)
模式识别中精确定位之垂直和水平投影相关推荐
- JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码...
本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍) ...
- 天池大赛—商场中精确定位用户所在店铺 作品分享
向AI转型的程序员都关注了这个号??? 大数据挖掘DT数据分析 公众号: datadw 本文初赛.决赛代码 github 地址 在公众号 datadw 里 回复 定位 即可获取. 题目回顾 题目地 ...
- 易语言对象--Word之精确定位表格单元格中并写入文本
1,打开一个doc文档; 2,代码编写: 变量定义 .版本 2 .局部变量 wdapp, 对象 .局部变量 tblIndex, 整数型 .局部变量 row, 整数型 .局部变量 column, 整数型 ...
- opencv实现图像的垂直投影和水平投影
垂直投影是将图像投影到另一个坐标系中的x轴上,水平投影是将图像投影到另一个坐标系中的y轴上.如果想要只获取到图像内容,而不想要图像的无用边缘信息时,可用垂直.水平投影获取行项中的最小值.最大值,列项中 ...
- matlab水声定位,基于水平投影的ROV水下GPS精确定位算法
基于水平投影的ROV水下GPS精确定位算法 基于水平投影的ROV水下GPS精确定位算法 张颖军 付本国 刘光 (海军潜艇学院,山东青岛,266046) 摘 要 精确的水下定位是提高水下机器人(ROV) ...
- [html] 当html中使用map标签时,area中coords值如何精确定位呢?
[html] 当html中使用map标签时,area中coords值如何精确定位呢? 在 area 标签上支持的属性有 shape.coords.href.alt.target.type.downlo ...
- opencv java水平投影_使用OpenCv中Mat进行水平投影与垂直投影并实现字符切分
由于要做图像的处理,所以最近在学习Opencv的相关知识,学习了Opencv中的Mat对象,查阅了网上的资料,了解了相关知识.现在实现了一个使用Mat对象来进行图像的水平投影与垂直投影,并在此基础之上 ...
- 精确定位网页中各个元素的位置
精确定位网页中各个元素的位置有两种方法:使用表格或层.使用表格是目前比较通用的做法,具体方法是:先在网页中建立一个表格,注意表格的边框宽度应为0.然后再把各个元素按照你的要求放在各个表格单元之中.仔细 ...
- office服务器草稿位置,精确定位图片在Word文档中的位置的操作方法
除了嵌入型图片外,图片在Word文档中的位置可以通过鼠标拖动来调整.如果需要对图片位置进行精确定位,可以使用相关的命令来进行操作,下面介绍精确定位图片在Word文档中的位置的具体操作方法. 1.在文档 ...
最新文章
- 近期几个电车调试视频
- java.util.Random 实现原理
- c# spire.xls 设置文字为微软雅黑_Excel工作薄常规样式设置,WorkBook.Styles
- 模糊控制算法详细讲解
- 福师计算机在线作业一2,福师《计算机》在线作业二答案.doc
- ABAP中的F4帮助怎么用
- 定时器翻转io口的好处_STM32 定时器输出比较翻转模式
- java socket编程—单客户端与服务器通信
- 大型体检系统源码 医院PEIS管理系统源码 BS架构
- eclipse运行代码后变为红色和绿色
- 微软五笔拼音输入法 86版 v7.2 bt
- 案例介绍 犹他州交通规划网络地图中心
- 全新三维成像技术:我们离科幻故事里的立体投影又近了一步
- 【鸿蒙开发和安卓开发】如何实现后台弹出界面和开机自启动
- 太湖之光超级计算机应用最高奖,“神威·太湖之光”两项应用入围“戈登·贝尔”奖...
- 树莓派4b 3.5inch显示屏+远程+FTP+建站
- 用STM32F103C8芯片做流水灯
- 【Python】Matplotlib绘图02_pyplot图表美化
- Elasticsearch - Indices stats 获取索引级别的统计信息之三 【indexing】索引操作信息
- 遇见狂神说HTML笔记1