OpenCV计算图像的水平和垂直积分投影

本文实例为大家分享了OpenCV计算图像的水平和垂直积分投影的具体代码,供大家参考,具体内容如下

#include <cv.h>
#include <highgui.h>
#pragma comment( lib, "cv.lib" )
#pragma comment( lib, "cxcore.lib" )
#pragma comment( lib, "highgui.lib" )
int main()
{
  IplImage * src=cvLoadImage("lena.jpg",0);
  //cvSmooth(src,src,CV_BLUR,3,3,0,0);
  cvThreshold(src,src,50,255,CV_THRESH_BINARY_INV);
  IplImage* paintx=cvCreateImage( cvGetSize(src),IPL_DEPTH_8U, 1 );
  IplImage* painty=cvCreateImage( cvGetSize(src),IPL_DEPTH_8U, 1 );
  cvZero(paintx);
  cvZero(painty);
  int* v=new int[src->width];
  int* h=new int[src->height];
  memset(v,0,src->width*4);
  memset(h,0,src->height*4); 

  int x,y;
  CvScalar s,t;
  for(x=0;x<src->width;x++)
  {
    for(y=0;y<src->height;y++)
    {
      s=cvGet2D(src,y,x);
      if(s.val[0]==0)
        v[x]++;
    }
  } 

  for(x=0;x<src->width;x++)
  {
    for(y=0;y<v[x];y++)
    {
      t.val[0]=255;
      cvSet2D(paintx,y,x,t);
    }
  } 

  for(y=0;y<src->height;y++)
  {
    for(x=0;x<src->width;x++)
    {
      s=cvGet2D(src,y,x);
      if(s.val[0]==0)
        h[y]++;
    }
  }
  for(y=0;y<src->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("二值图像",src);
  cvShowImage("垂直积分投影",paintx);
  cvShowImage("水平积分投影",painty);
  cvWaitKey(0);
  cvDestroyAllWindows();
  cvReleaseImage(&src);
  cvReleaseImage(&paintx);
  cvReleaseImage(&painty);
  return 0;
}

结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • opencv检测直线方法之投影法

    本文实例为大家分享了opencv检测直线之投影法的具体代码,供大家参考,具体内容如下 以下是我对投影法的一点认识和实验: 投影法就是数字图像在某个方向上进行像素累加.通过水平和垂直方向的投影,可以得到表格图像投影的几个特点: (1)表格区域的水平与竖直投影分布通常出现周期性的尖峰 (2)在文字投影的行与行之间或列与列之间常会出现明显的空白区 因此,求图像水平以及竖直投影,根据特点分别设以阈值就可以将横线以及竖直线所在位置确定. 第一步:求图像的水平投影.竖直投影 第二步:设定合理阈值,求取大于阈

  • python opencv 直方图反向投影的方法

    本文介绍了python opencv 直方图反向投影的方法,分享给大家,具体如下: 目标: 直方图反向投影 原理: 反向投影可以用来做图像分割,寻找感兴趣区间.它会输出与输入图像大小相同的图像,每一个像素值代表了输入图像上对应点属于目标对象的概率,简言之,输出图像中像素值越高的点越可能代表想要查找的目标.直方图投影经常与camshift(追踪算法)算法一起使用. 算法实现的方法,首先要为包含我们感兴趣区域的图像建立直方图(样例要找一片草坪,其他的不要).被查找的对象最好是占据整个图像(图像里全是

  • python OpenCV学习笔记直方图反向投影的实现

    本文介绍了python OpenCV学习笔记直方图反向投影的实现,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dc/df6/tutorial_py_histogram_backprojection.html 它用于图像分割或寻找图像中感兴趣的对象.简单地说,它创建一个与我们的输入图像相同大小(但单通道)的图像,其中每个像素对应于属于我们对象的像素的概率.输出图像将使我们感兴趣的对象比其余部分更白. 该怎么做呢?我们创建一个图像的直方图,其中包

  • Python OpenCV处理图像之图像直方图和反向投影

    本文实例为大家分享了Python OpenCV图像直方图和反向投影的具体代码,供大家参考,具体内容如下 当我们想比较两张图片相似度的时候,可以使用这一节提到的技术 直方图对比 反向投影 关于这两种技术的原理可以参考我上面贴的链接,下面是示例的代码: 0x01. 绘制直方图 import cv2.cv as cv def drawGraph(ar,im, size): #Draw the histogram on the image minV, maxV, minloc, maxloc = cv.

  • OpenCV计算图像的水平和垂直积分投影

    本文实例为大家分享了OpenCV计算图像的水平和垂直积分投影的具体代码,供大家参考,具体内容如下 #include <cv.h> #include <highgui.h> #pragma comment( lib, "cv.lib" ) #pragma comment( lib, "cxcore.lib" ) #pragma comment( lib, "highgui.lib" ) int main() { IplIma

  • python Opencv计算图像相似度过程解析

    这篇文章主要介绍了python Opencv计算图像相似度过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.相关概念 一般我们人区分谁是谁,给物品分类,都是通过各种特征去辨别的,比如黑长直.大白腿.樱桃唇.瓜子脸.王麻子脸上有麻子,隔壁老王和儿子很像,但是儿子下巴涨了一颗痣和他妈一模一样,让你确定这是你儿子. 还有其他物品.什么桌子带腿.镜子反光能在里面倒影出东西,各种各样的特征,我们通过学习.归纳,自然而然能够很快识别分类出新物品.

  • Python Opencv实现图像轮廓识别功能

    本文实例为大家分享了python opencv识别图像轮廓的具体代码,供大家参考,具体内容如下 要求:用矩形或者圆形框住图片中的云朵(不要求全部框出) 轮廓检测 Opencv-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓. import cv2 img = cv2.imread('cloud.jpg') # 灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化 ret, binary = cv2.th

  • OpenCV实现图像校正功能

    一. 需求分析 首先是需求: 1.利用 OpenCV 里面的仿射变换函 数实现对图像进行一些基本的变换,如平移.旋转.缩放 2.学习透视变换原理,对一个矩形进行透视变换,并将变换结果绘制出来.先调用 OpenCV 函数实现透视变换,自己编写代码实现透视变换. 3.识别一张倾斜拍摄的纸张,找出轮廓,提取出该纸张的位置 4. 假设你已通过图像处理的算法找到发生形变的纸张的位置,那么对这个倾斜 纸张进行变换,得到纸张的垂直视图,实现文档校准. 然后是分析: 1.首先要调用OpenCV的函数对图像进行平

  • Java OpenCV实现图像镜像翻转效果

    本文实例为大家分享了Java OpenCV实现图像镜像翻转效果的具体代码,供大家参考,具体内容如下 主要使用OpenCV的flip()方法,可以实现图像的垂直.水平以及同时垂直镜像翻转. flip是Core的静态方法,用法为: public static void flip(Mat src, Mat dst, int flipCode) 参数说明: src:输入图像: dst:输出图像: flipCode: = 0 图像向下翻转 > 0 图像向右翻转 < 0 图像同时向下向右翻转 代码如下:

  • Python OpenCV 基于图像边缘提取的轮廓发现函数

    基础知识铺垫 在图像中,轮廓可以简单的理解为连接具有相同颜色的所有连续点(边界)的曲线,轮廓可用于形状分析和对象检测.识别等领域. 轮廓发现的原理:先通过阈值分割提取目标物体,再通过边缘检测提取目标物体轮廓. 一个轮廓就是一系列的点(像素),这些点构成了一个有序的点集合. 使用 cv2.findContours 函数可以用来检测图像的边缘. 函数原型说明 contours, hierarchy = cv2.findContours(image, mode, method[, contours[,

  • 基于Python和openCV实现图像的全景拼接详细步骤

    基本介绍 图像的全景拼接,即"缝合"两张具有重叠区域的图来创建一张全景图.其中用到了计算机视觉和图像处理技术有:关键点检测.局部不变特征.关键点匹配.RANSAC(Random Sample Consensus,随机采样一致性)和透视变形. 具体步骤 (1)检测左右两张图像的SIFT关键特征点,并提取局部不变特征 : (2)使用knnMatch检测来自右图(左图)的SIFT特征,与左图(右图)进行匹配 : (3)计算视角变换矩阵H,用变换矩阵H对右图进行扭曲变换: (4)将左图(右图)

  • opencv实现图像平移

    本文实例为大家分享了opencv实现图像平移的具体代码,供大家参考,具体内容如下 图像平移指的是沿水平方向或垂直方向进行图像的移动. 平移变换公式: 对于原始图像而言,正变换矩阵: 对于目标图像而言,逆变换矩阵: 代码: #include<opencv2/imgproc.hpp> #include<opencv2/highgui.hpp> #include<opencv2/core.hpp> #include<iostream> #include<st

  • OpenCV实现图像细化算法

    目录 1.基础概念 2.细化过程 3.代码实现 4.实验结果 1.基础概念 图像细化(Image Thinning),一般指二值图像的骨架化(Image Skeletonization)的一种操作运算.细化是将图像的线条从多像素宽度减少到单位像素宽度过程的简称,一些文章经常将细化结果描述为“骨架化”.“中轴转换”和“对称轴转换”. 细化技术的一个主要应用领域是位图矢量化的预处理阶段,相关研究表明,利用细化技术生成的位图的骨架质量受到多种因素的影响,其中包括图像自身的噪声.线条粗细不均匀.端点的确

  • Python+OpenCV之图像轮廓详解

    目录 1. 图像轮廓 1.1 findContours介绍 1.2 绘制轮廓 1.3 轮廓特征 2. 轮廓近似 2.1 轮廓 2.2 边界矩形 2.3 外界多边形及面积 1. 图像轮廓 1.1 findContours介绍 cv2.findContours(img, mode, method) mode:轮廓检索模式 RETR_EXTERNAL :只检索最外面的轮廓: RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中: RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是

随机推荐