您的位置:首页 > 理论基础

计算机视觉介绍

2007-07-13 21:13 155 查看
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, 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐