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

 更新时间:2018年12月26日 11:06:47   作者:长相忆兮长相忆  
这篇文章主要为大家详细介绍了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; 
} 


结果:

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

相关文章

  • C++ OpenCV中几种基本的图像处理方式

    C++ OpenCV中几种基本的图像处理方式

    大家好,本篇文章主要讲的是C++ OpenCV中几种基本的图像处理方式,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C++11 简单实现线程池的方法

    C++11 简单实现线程池的方法

    这篇文章主要介绍了C++11 简单实现线程池的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Qt+Quick实现播放音乐和视频的开发

    Qt+Quick实现播放音乐和视频的开发

    这篇文章主要为大家详细介绍了如何利用Qt+Quick实现播放音乐和视频的开发,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03
  • 关于C语言中的指针与二维数组

    关于C语言中的指针与二维数组

    这篇文章主要介绍了关于C语言中的指针与二维数组,C语言中,指针是一个复杂但又灵活多变的知识点,我们知道,在一维数组中,对于一个数组a[],*a,a,&a,都表示a的首地址,但如果与二维数组混合使用,就显得更为复杂了,需要的朋友可以参考下
    2023-07-07
  • C++ 实现多数的最大公约数的实例

    C++ 实现多数的最大公约数的实例

    这篇文章主要介绍了C++ 实现多数的最大公约数的实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • 深入学习C语言中的函数指针和左右法则

    深入学习C语言中的函数指针和左右法则

    这篇文章主要介绍了深入学习C语言中的函数指针和左右法则,左右法则是一种常用的C指针声明,需要的朋友可以参考下
    2015-08-08
  • QT输入框输入限制整理(正则表达式限制)

    QT输入框输入限制整理(正则表达式限制)

    我们有时需要限制文本框输入内容的类型,下面这篇文章主要给大家介绍了关于QT输入框输入限制的相关资料,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-04-04
  • 如何寻找数组中的第二大数

    如何寻找数组中的第二大数

    本篇文章是对如何寻找数组中的第二大数进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++中Boost的智能指针scoped_ptr

    C++中Boost的智能指针scoped_ptr

    这篇文章介绍了C++中Boost的智能指针scoped_ptr,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • C++使用map实现多进程拷贝文件的程序思路

    C++使用map实现多进程拷贝文件的程序思路

    这篇文章主要介绍了C++使用mmap实现多进程拷贝文件,通过本文给大家分享程序思路及完整代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12

最新评论