OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
楼主: bebekifis

Opencv感想和一些分享

  [复制链接]
发表于 2010-4-9 21:50:46 | 显示全部楼层

Opencv感想和一些分享

双目测距 和 两个视角分别拍摄 。。。在用来恢复三维几何模型方面 有什么区别呢?
回复 支持 反对

使用道具 举报

发表于 2010-4-15 16:11:30 | 显示全部楼层

Opencv感想和一些分享

赞1个
呵呵
回复 支持 反对

使用道具 举报

发表于 2010-4-30 08:59:55 | 显示全部楼层

Opencv感想和一些分享

好文,谢谢楼主分享心得

刚准备学OPENCV,有算法和代码方面的困惑,很有借鉴价值
回复 支持 反对

使用道具 举报

发表于 2010-5-16 20:25:57 | 显示全部楼层

Opencv感想和一些分享

下面介绍一个改动Opencv代码实现更有用的功能的方法

图像的直方图均匀化在做光照均衡时十分有用,但实际上直方图规定话其实更有用,Opencv里面只提供了直方图均匀化的代码cvEqualizeHist
在这个函数的基础上稍加改动,就能得到直方图规定化的代码:
  1. void cvMatchHist( const CvArr* src, CvArr* dst, CvHistogram * histdst )
  2. {
  3.         CvHistogram* hist = 0;
  4.         CvMat* lut = 0, *lutG = 0, *lutZ = 0;
  5.         CvHistogram * histeq = NULL;
  6.         CV_FUNCNAME( "cvMatchHist" );
  7.         __BEGIN__;
  8.         cvCopyHist( histdst, &histeq );
  9.         cvNormalizeHist(histeq, 1.0);
  10.         int i, hist_sz = 256;
  11.         CvSize img_sz;
  12.         float scale;
  13.         float* h, *hG;
  14.         int sum = 0;
  15.         int type;
  16.         CV_CALL( type = cvGetElemType( src ));
  17.         if( type != CV_8UC1 )
  18.                 CV_ERROR( CV_StsUnsupportedFormat, "Only 8uC1 images are supported" );
  19.         CV_CALL( hist = cvCreateHist( 1, &hist_sz, CV_HIST_ARRAY ));
  20.         CV_CALL( lut = cvCreateMat( 1, 256, CV_8UC1 ));
  21.         CV_CALL( lutG = cvCreateMat( 1, hist_sz, CV_8UC1 ));
  22.         CV_CALL( lutZ = cvCreateMat( 1, hist_sz, CV_8UC1 ));
  23.         CV_CALL( cvCalcArrHist( (CvArr**)&src, hist ));
  24.         CV_CALL( img_sz = cvGetSize( src ));
  25.         scale = 255.f/(img_sz.width*img_sz.height);
  26.         h = (float*)cvPtr1D( hist->bins, 0 );
  27.         hG = (float*)cvPtr1D( histeq->bins, 0 );
  28.         for(i = 0; i < 256; i++)
  29.         {
  30.                 sum += cvRound(hG&#91;i&#93;*255);
  31.                 lutG->data.ptr&#91;i&#93; = (uchar)cvRound(sum);
  32.         }
  33.         sum = 0;
  34.         for( i = 0; i < hist_sz; i++ )
  35.         {
  36.                 sum += cvRound(h&#91;i&#93;);
  37.                 lut->data.ptr&#91;i&#93; = (uchar)cvRound(sum*scale);
  38.         }
  39.         for (i = 0; i < 256; i++)
  40.         {
  41.                 int k = 0;
  42.                 while(lutG->data.ptr&#91;k&#93; < i)
  43.                 {
  44.                         k++;
  45.                 }
  46.                 lutZ->data.ptr&#91;i&#93; = k;
  47.         }
  48.         lut->data.ptr&#91;0&#93; = 0;
  49.         CV_CALL( cvLUT( src, dst, lut ));
  50.         CV_CALL( cvLUT( dst, dst, lutZ ));
  51.         __END__;
  52.         cvReleaseHist(&hist);
  53.         cvReleaseMat(&lut);
  54.         cvReleaseMat(&lutG);
  55.         cvReleaseMat(&lutZ);
  56.         cvReleaseHist(&histeq);
  57. }
复制代码

上面代码似乎有误,两处sum += cvRound(h)语句中,cvRound函数似乎不需要,因为如果在这里舍入的话加出来的sum最后很可能不是255.
另外问一句,函数中很多的宏定义,比如__BEGIN__,CV_CALL,CV_FUNCNAME,都是干什么使的?我查了一下他们的定义,__BEGIN__只是一个大括号,CV_CALL似乎加入了出错处理,有谁能详细解释一下呢?
回复 支持 反对

使用道具 举报

发表于 2010-6-7 08:41:39 | 显示全部楼层

Opencv感想和一些分享

感谢前辈的指导啊 好好学习OpenCV
回复 支持 反对

使用道具 举报

发表于 2010-6-13 15:19:57 | 显示全部楼层

Opencv感想和一些分享

楼主是学术实验兼收
回复 支持 反对

使用道具 举报

发表于 2010-6-15 13:52:28 | 显示全部楼层

Opencv感想和一些分享

很佩服楼主,强人
回复 支持 反对

使用道具 举报

发表于 2010-6-15 15:43:41 | 显示全部楼层

Opencv感想和一些分享

好像很复杂似的
回复 支持 反对

使用道具 举报

发表于 2010-6-20 00:51:35 | 显示全部楼层

Opencv感想和一些分享

标记,做个学习
回复 支持 反对

使用道具 举报

发表于 2010-7-1 18:11:33 | 显示全部楼层

Opencv感想和一些分享

小弟刚刚进入研究生阶段,方向是图像处理方面,大家给点意见。本人计算机水平的确不咋地。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-4 08:08 , Processed in 0.009144 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表