当前位置:编程学习 > C/C++ >>

立体视觉算法--SAD+DP

[cpp]  
#include <cstdio>  
#include <cstring>  
#include <iostream>  
#include<cv.h>  
#include<highgui.h>  
#include <cmath>  
  
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"<<endl;   
    }else{  
        //cout <<"File Open Failed"<<end;  
        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:  "<<SH2<<endl;  
    cout<<"SW2:  "<<SW2<<endl;  
  
    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<imageWidth - 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);  
                        }  
  
                    }  
                }  
          &n
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,