• 大小: 15KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: C/C++
  • 标签: opencv  双目视觉  

资源简介

可在Windows环境中使用,利用opencv和vs软件,环境配置好之后,更改程序中的相应图片,就可以得到双目视觉的视差图

资源截图

代码片段和文件信息


#include“stdafx.h“
#include
#include
#include
#include
#include
#include
#include

using namespace std;
using namespace cv;

bool left_mouse = false;
typedef Point_ Point2s;

IplImage* src = 0;
IplImage* dst = 0;
void on_mouse(int event int x int y int flags void* ustc)   //在图像上显示坐标
{
static CvPoint pre_pt = { -1-1 };
static CvPoint cur_pt = { -1-1 };
CvFont font;
cvInitFont(&font CV_FONT_HERSHEY_SIMPLEX 0.5 0.5 0 1 CV_AA);//初始化字体结构体
char temp[16];
//char label2[20];
if (event == CV_EVENT_LBUTTONDOWN)//点击显示坐标
{
cvCopy(dst src);
sprintf(temp “(%d%d)“ x y);
//sprintf(label2 “Pixel:(%d%d)“ x y);
printf(temp “Pixel:(%d%d)“ x y);
printf(“\n“);

printf(“\n“);

pre_pt = CvPoint(xy);
cvPutText(src temp pre_pt &font cvScalar(0 0 0 255));
cvCircle(src pre_pt 3 CvScalar(255 0 0 0) CV_FILLED CV_AA 0);
cvShowImage(“src“src);
cvCopy(src dst);
}
else if (event == CV_EVENT_MOUSEMOVE && !(flags & CV_EVENT_FLAG_LBUTTON))//鼠标追踪
{
cvCopy(dst src);
sprintf(temp “(%d%d)“ x y);
cur_pt = cvPoint(x y);
cvPutText(src temp cur_pt &font cvScalar(0 0 0 255));
cvShowImage(“src“ src);
}
else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))//鼠标追踪
{
cvCopy(dst src);
sprintf(temp “(%d%d)“ x y);
cur_pt = cvPoint(x y);
cvPutText(src temp cur_pt &font cvScalar(0 0 0 255));
cvRectangle(src pre_pt cur_pt cvScalar(0 255 0 0) 1 8 0);
cvShowImage(“src“ src);
}
else if (event == CV_EVENT_LBUTTONUP)
{
sprintf(temp “(%d%d)“ x y);
cur_pt = cvPoint(x y);
cvPutText(src temp cur_pt &font cvScalar(0 0 0 255));
cvCircle(src cur_pt 3 cvScalar(255 0 0 0) CV_FILLED CV_AA 0);
cvRectangle(src pre_pt cur_pt cvScalar(0 255 0 0) 1 8 0);
cvShowImage(“src“ src);
cvCopy(src dst);
}
}



static void print_help()
{
    printf(“\nDemo stereo matching converting L and R images into disparity and point clouds\n“);
    printf(“\nUsage: stereo_match   [--algorithm=bm|sgbm|hh|sgbm3way] [--blocksize=]\n“
           “[--max-disparity=] [--scale=scale_factor>] [-i=] [-e=]\n“
           “[--no-display] [-o=] [-p=]\n“);
}

static void saveXYZ(const char* filename const Mat& mat)
{
    const double max_z = 1.0e4;
    FILE* fp = fopen(filename “wt“); //FILE *fp 是声明,声明fp是指针,用来指向FILE类型的对象
    for(int y = 0; y < mat.rows; y++)
    {
        for(int x = 0; x < mat.cols; x++)
        {
            Vec3f point = mat.at(y x);//Vec3f表示的是3通道float类型的 Vect,就相当于3通道float类型的图像,mat.at(y x)是访问图像的一种方式
            if(fabs(point[2] - 

评论

共有 条评论