计算机视觉介绍

http://blog.csdn.net/hardVB/archive/2007/07/11/1685493.aspxwww

opencv提供了双目视觉检测距离信息的函数,试着使用了两个摄像头获得两副图像测试一下,感觉背景单纯,目标较小的情况下,得到的效果较好一些。(下图分别是左图像,右图像,得到的深度图像)

计算机视觉介绍_第1张图片

用一个长的物体来测试深度,效果不好。如下:

计算机视觉介绍_第2张图片

难点问题是两个摄像机即使是同一个机型,同样的镜头,得到的图像颜色有所轻微的差别,导致效果不好。

而使用一个摄像机平移左右得到的结果会更好一些。以下图片是opencv提供的图片,效果较好。

计算机视觉介绍_第3张图片

代码:

#include  " stdafx.h "
#include 
< iostream >
#include 
< string .h >
#include 
< cxcore.h >
#include 
< cv.h >
#include 
< cvaux.h >
#include 
< highgui.h >
#include 
< fstream >


IplImage 
* image  =   0  ;  // 原始图像

using   namespace  std;


int  main( int  argc,  char *  argv[])
{

    IplImage
*  srcLeft  =  cvLoadImage( " left.jpg " , 1 );
    IplImage
*  srcRight  =  cvLoadImage( " right.jpg " , 1 );
    IplImage
*  leftImage  =  cvCreateImage(cvGetSize(srcLeft), IPL_DEPTH_8U,  1 );
    IplImage
*  rightImage  =  cvCreateImage(cvGetSize(srcRight), IPL_DEPTH_8U,  1 );
    IplImage
*  depthImage  =  cvCreateImage(cvGetSize(srcRight), IPL_DEPTH_8U,  1 );

    cvCvtColor(srcLeft, leftImage, CV_BGR2GRAY);
    cvCvtColor(srcRight, rightImage, CV_BGR2GRAY);

    cvFindStereoCorrespondence( leftImage, rightImage, CV_DISPARITY_BIRCHFIELD, depthImage, 
50 15 3 6 8 15  );

    cvNamedWindow(
" win1 " , 1 );
    cvNamedWindow(
" win2 " , 1 );
    cvNamedWindow(
" win3 " , 1 );

    cvNormalize(depthImage,depthImage,
0 , 255 ,CV_MINMAX, 0  );

    
for (;;)
    {
        cvShowImage(
" win1 " ,depthImage);
        cvShowImage(
" win2 " ,srcLeft);
        cvShowImage(
" win3 " ,srcRight);
        
if (cvWaitKey( 20 ) == 27 break ;
    }

    
return   0 ;
}

你可能感兴趣的:(计算机视觉介绍)