计算机视觉介绍

来源:互联网 发布:最好用的健身软件 编辑:程序博客网 时间:2024/05/22 10:35

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

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

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

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

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

代码:

#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, 
501536815 );

    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)==27break;
    }

    
return 0;
}
原创粉丝点击