设为首页 加入收藏

TOP

立体视觉算法--SAD+DP(一)
2015-11-21 01:12:07 来源: 作者: 【 】 浏览:8
Tags:立体 视觉 算法 --SAD
[cpp] ?
#include ?
#include ?
#include ?
#include ?
#include ?
#include ?
??
using namespace std; ?
const int Width = ?512; ?
const int Height = 512; ?
int Ddynamic[Width][Width]; ?
??
int ?main() ?
{ ? ?
? ? //打开文件 ?
? ? FILE* pFile; ?
? ? if (pFile = fopen("data.txt","a")) ?
? ? { ?
? ? ? ? //cout <<"File Open Success"<
? ? }else{ ?
? ? ? ? //cout <<"File Open Failed"<
? ? ? ? return 0; ?
? ? } ?
? ? // IplImage * leftImage = cvLoadImage("l1.png",0); ?
? ? // IplImage * rightImage = cvLoadImage("r1.png",0); ?
??
? ? //IplImage * leftImage = cvLoadImage("l2.jpg",0); ?
? ? //IplImage * rightImage = cvLoadImage("r2.jpg",0); ?
??
??
? ? IplImage * leftImage = cvLoadImage("left.bmp",0); ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? IplImage * rightImage = cvLoadImage("right.bmp",0); ?
??
? ? int imageWidth = leftImage->width; ?
? ? int imageHeight =leftImage->height; ?
??
? ? IplImage * leftDepth = cvCreateImage(cvGetSize(leftImage),leftImage->depth,1); ?
? ? IplImage * rightDepth = cvCreateImage(cvGetSize(leftImage),leftImage->depth,1); ?
??
? ? IplImage * leftValid = cvCreateImage(cvGetSize(leftImage),leftImage->depth,1); ?
? ? IplImage * rightValid = cvCreateImage(cvGetSize(leftImage),leftImage->depth,1); ?
??
? ? IplImage * leftFilter = cvCreateImage(cvGetSize(leftImage),leftImage->depth,1); ?
? ? IplImage * rightFilter = cvCreateImage(cvGetSize(leftImage),leftImage->depth,1); ?
??
? ? IplImage * depth = cvCreateImage(cvGetSize(leftImage),leftImage->depth,1); ?
? ? IplImage * valid = cvCreateImage(cvGetSize(leftImage),leftImage->depth,1); ?
??
? ? unsigned char * pPixel = NULL; ?
? ? unsigned char ?pixel; ?
? ? unsigned char * pPixel2 = NULL; ?
? ? unsigned char ?pixel2; ?
? ? cvZero(leftDepth); ?
? ? cvZero(rightDepth); ?
? ? cvZero(leftValid); ?
? ? cvZero(rightValid); ?
? ? cvZero(leftFilter); ?
? ? cvZero(rightFilter); ?
? ? cvZero(depth); ?
? ? cvZero(valid); ?
??
??
??
? ? CvSize SADWindowSize = cvSize(5,5); ?//(widh,height) ?
? ? int SW2 = SADWindowSize.width/2; ?
? ? int SH2 = SADWindowSize.height/2; ?
? ? cout<<"SH2: ?"<
? ? cout<<"SW2: ?"<
??
? ? int minD = 0; ?
? ? int maxD = 15; ?
? ? //假设图像是经过矫正的,那么每次都只是需要搜搜同一行的内容 ?
? ? int max12Diff = 8*SADWindowSize.width*SADWindowSize.height; ?
??
? ? for (int i = 0;i < imageWidth;i++) ?
? ? { ?
? ? ? ? Ddynamic[0][i] = 0; ?
? ? ? ? Ddynamic[i][0] = 0; ?
? ? } ?
? ? unsigned char * pLeftPixel ?= NULL; ?
? ? unsigned char * pRightPixel = NULL; ?
? ? unsigned char leftPixel = 0; ?
? ? unsigned char rightPixel =0; ?
? ? int m,n,l; ?
? ? int difPixel = 0; ?
? ? int t1 = clock(); ?
? ? for (int i = SH2 ; i < imageHeight -SH2;i++) ?
? ? { ?
? ? ? ? for (int j = SW2; j
? ? ? ? { ?
? ? ? ? ? ? for (int k = j + minD; k <= j + maxD;k++) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? difPixel = 0; ?
? ? ? ? ? ? ? ? for (m = -SH2;m <= SH2;m++) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? for (n = -SW2; n <= SW2;n++) ?
? ? ? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? ? ? pRightPixel= (unsigned char*)rightImage->imageData+ ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? (i+m)*rightImage->widthStep + j+n; ?
? ? ? ? ? ? ? ? ? ? ? ? rightPixel = *pRightPixel; ?
? ? ? ? ? ? ? ? ? ? ? ? if (k < SW2 ?|| k ?>= imageWidth -SW2 ) ?
? ? ? ? ? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? difPixel += rightPixel; ?
? ? ? ? ? ? ? ? ? ? ? ? }else { ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? pLeftPixel = (unsigned char*)leftImage->imageData + ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (i+m)*leftImage->widthStep + k+n; ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? leftPixel ?= *pLeftPixel; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? difPixel += abs(leftPixel - rightPixel); ?
? ? ? ? ? ? ? ? ? ? ? ? } ?
??
? ? ? ? ? ? ? ? ? ? } ?
? ?
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇趋势科技一道编程题 下一篇杭电OJ――1157 Who's in the..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: