error: (-27:Null pointer) NULL window: 'SGBM' in function 'cvGetTrackbarPos'
时间: 2024-05-27 13:08:43 浏览: 91
这个错误通常出现在使用OpenCV的StereoBM或StereoSGBM函数时,其原因是窗口名字不正确或没有创建窗口。
可以尝试以下几种解决方法:
1. 确保已经创建了窗口并且窗口名字正确。
2. 检查代码中是否有调用cv::namedWindow函数创建窗口,如果没有,需要先创建窗口。
3. 如果是在使用cv::createTrackbar函数时出现该错误,需要检查对应的窗口名是否正确。
4. 如果以上方法都无法解决问题,可以尝试重新安装OpenCV库文件。
相关问题
AttributeError: module 'cv2' has no attribute 'STEREO_SGBM_MODE_SGBM_HH'
AttributeError: module 'cv2' has no attribute 'STEREO_SGBM_MODE_SGBM_HH'异常是由于cv2模块中没有名为'STEREO_SGBM_MODE_SGBM_HH'的属性。该属性可能是过时的或者在该版本的cv2中被移除了。
要解决这个问题,可以尝试以下几种方法:
1. 检查你的cv2模块的版本。确保你使用的是最新版本,并且该版本中包含了'STEREO_SGBM_MODE_SGBM_HH'属性。
2. 检查你的代码中是否存在拼写错误或其他语法错误。确保正确地引用了cv2模块,并且使用了正确的属性名称。
3. 如果你的代码是从其他来源复制粘贴的,请确保你已经正确地安装了cv2模块。有时候,安装了不完整或错误的模块可能导致属性错误。
4. 如果以上方法都没有解决问题,可以尝试查找相关文档或论坛,看是否有其他人遇到了相同的问题,并找到了解决方法。
总之,AttributeError异常通常是由于模块中不存在特定的属性或方法引起的。要解决这个问题,需要检查模块的版本、检查代码中的拼写错误,并确保正确地安装了相应的模块。
双目立体匹配算法:SGM 实时代码
以下是双目立体匹配算法SGM的实时代码:
```
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
const int max_image_size = 960;
const int max_disparity = 64;
const int P1 = 5;
const int P2 = 70;
const int penalty_scale = 10;
const int uniqueness_ratio = 15;
const int speckle_window_size = 100;
const int speckle_range = 32;
int main(int argc, char** argv) {
if(argc != 3) {
cout << "Usage: ./sgm_stereo left_image right_image" << endl;
return -1;
}
Mat imgL = imread(argv[1], IMREAD_GRAYSCALE);
Mat imgR = imread(argv[2], IMREAD_GRAYSCALE);
if(imgL.empty() || imgR.empty()) {
cout << "Error: Could not open or find the images" << endl;
return -1;
}
int width = imgL.cols;
int height = imgL.rows;
if(width > max_image_size || height > max_image_size) {
cout << "Error: Image size too large" << endl;
return -1;
}
int min_disparity = 0;
int max_disparity = 64;
Mat disparity_map = Mat::zeros(height, width, CV_8UC1);
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
int min_cost = INT_MAX;
int best_disparity = min_disparity;
for(int d = min_disparity; d < max_disparity; d++) {
int sum = 0;
int count = 0;
for(int dy = -1; dy <= 1; dy++) {
for(int dx = -1; dx <= 1; dx++) {
int xl = x + dx;
int xr = x + dx - d;
if(xl < 0 || xl >= width || xr < 0 || xr >= width) {
continue;
}
int diff = abs((int)imgL.at<uchar>(y+dy, x+dx) - (int)imgR.at<uchar>(y+dy, xr));
sum += diff;
count++;
}
}
int cost = sum / count;
if(d > min_disparity) {
int diff = abs(d - best_disparity);
cost += (diff == 1) ? P1 : (P1 + (diff - 1) * P2);
}
if(cost < min_cost) {
min_cost = cost;
best_disparity = d;
}
}
disparity_map.at<uchar>(y, x) = best_disparity;
}
}
Ptr<StereoSGBM> stereo = StereoSGBM::create(min_disparity, max_disparity, penalty_scale, 8 * imgL.channels() * speckle_window_size * speckle_window_size, 32 * speckle_range, uniqueness_ratio, StereoSGBM::MODE_SGBM_3WAY);
stereo->compute(imgL, imgR, disparity_map);
namedWindow("Disparity Map", WINDOW_NORMAL);
imshow("Disparity Map", disparity_map);
waitKey(0);
return 0;
}
```
需要注意的是,此代码只是SGM算法的实现之一,针对不同的场景和需求,实现方式可能会有所不同。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)