#include "stdafx.h" #include "mysad.h" Mat mySAD::computeSAD(Mat &L, Mat &R) { Mat Disparity(L.rows,L.cols,CV_8U,Scalar::all(0)); float temp=0; float temp_min = 0; for (int nrow = 1; nrow < L.rows-1; nrow++) { for (int ncol = 1; ncol < L.cols-1; ncol++) { temp_min = 100000; for (int d = 0; (d < this->dsr && ncol+d+1<L.cols-1); d++) { temp = abs( L.at<unsigned char>(nrow - 1, ncol - 1) - R.at<unsigned char>(nrow - 1, ncol + d - 1) + L.at<unsigned char>(nrow - 1, ncol ) - R.at<unsigned char>(nrow - 1, ncol + d ) + L.at<unsigned char>(nrow - 1, ncol + 1) - R.at<unsigned char>(nrow - 1, ncol + d + 1) + L.at<unsigned char>(nrow , ncol - 1) - R.at<unsigned char>(nrow , ncol + d - 1) + L.at<unsigned char>(nrow , ncol ) - R.at<unsigned char>(nrow , ncol + d ) + L.at<unsigned char>(nrow , ncol + 1) - R.at<unsigned char>(nrow , ncol + d + 1) + L.at<unsigned char>(nrow + 1, ncol - 1) - R.at<unsigned char>(nrow + 1, ncol + d - 1) + L.at<unsigned char>(nrow + 1, ncol ) - R.at<unsigned char>(nrow + 1, ncol + d ) + L.at<unsigned char>(nrow + 1, ncol + 1) - R.at<unsigned char>(nrow + 1, ncol + d + 1)); if (temp < temp_min) { temp_min = temp; Disparity.at<unsigned char>(nrow,ncol) = d*16; } } } float rate = (float)(nrow / L.rows); } return Disparity; }
时间: 2024-04-01 15:32:44 浏览: 49
这是 mySAD 类的成员函数 computeSAD 的实现代码。该函数接受两个输入图像 L 和 R,计算它们的 SAD 匹配,并返回一个位于 [0,255] 范围内的灰度图像 Disparity。在该函数中,首先对 Disparity 进行初始化,然后遍历 L 中的每个像素点,对于每个像素点,在 R 中搜索其可能的匹配位置,计算 SAD 值,并找到最小的 SAD 值对应的位移,将其赋值给 Disparity 中对应的像素点。这里使用了一个窗口大小为 3x3 的模板进行计算,共计算了搜索半径 dsr 个位移。最后返回计算得到的 Disparity。
相关问题
#include stdafx.h报错解决办法
"stdafx.h" 是 Microsoft Visual Studio 中的一个预编译头文件,它包含了一些通用的头文件和库文件。如果你使用的是 Visual Studio,那么使用 "stdafx.h" 可以显著提高编译速度。但是,如果你在其他编译器中使用 "stdafx.h",可能会出现编译错误。
如果你在使用 Visual Studio 中出现了 "#include <stdafx.h> 未找到" 的编译错误,可以尝试以下解决方法:
1. 确认你的项目使用预编译头文件
在 Visual Studio 中,只有使用预编译头文件的项目才能包含 "stdafx.h"。你可以在项目属性中的 "C/C++" -> "预编译头" 中确认是否启用了预编译头文件。
2. 确认 "stdafx.h" 文件存在
如果你的项目中使用了 "stdafx.h",那么必须确保该文件存在于项目中。你可以在项目文件夹中查找该文件。
3. 禁用预编译头文件
如果你不想使用预编译头文件,可以在项目属性中的 "C/C++" -> "预编译头" 中选择 "不使用预编译头"。
4. 修改 "stdafx.h" 文件名
如果你的项目中存在多个预编译头文件,可以尝试修改 "stdafx.h" 的文件名,避免与其他文件名重复。
希望以上解决方法能够帮助你解决 "#include <stdafx.h> 未找到" 的编译错误。
#include stdafx.h打不开
这个问题可能有以下几种解决方法:
1. 确认stdafx.h文件是否存在于项目中,并且路径是否正确。
2. 如果stdafx.h文件存在于项目中,可以尝试重新生成解决方案,或者清除解决方案并重新生成。
3. 如果以上方法都无法解决问题,可以尝试在项目属性中关闭预编译头选项,或者将stdafx.h文件从项目中移除。
阅读全文