detector.match(image_gray)报错error: OpenCV(4.6.0) :-1: error: (-5:Bad argument) in function 'match'- linemod_Detector.match() missing required argument 'threshold' (pos 2)
时间: 2023-08-28 07:11:46 浏览: 177
这个错误提示是因为 `match()` 方法缺少一个必需的参数 `threshold`。 `match()` 方法需要传入一个阈值参数,用于筛选匹配的结果。你可以查看一下你的代码,看看是否有遗漏该参数。如果确实遗漏了该参数,你可以尝试传入一个合适的阈值值,例如:
```python
matches, scores = detector.match(image_gray, threshold=90)
```
其中 `threshold` 的值可以根据你的具体情况进行调整。
相关问题
# 读取模板图片 template = cv2.imread(template_path) # 转为灰度图像 template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY) # 创建Linemod匹配器 detector = cv2.linemod.getDefaultLINE() # 添加模板信息 detector.addTemplate(template_gray,'1', object_mask=None)# 将模板图像添加到检测器中,设置名称为 "template" # 读取待匹配图像 image = cv2.imread(image_path) # 转为灰度图像 image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 进行匹配 matches, scores = detector.match(image_gray,threshold=99)报错error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv_contrib\modules\rgbd\src\linemod.cpp:1397: error: (-215:Assertion failed) sources.size() == modalities.size() in function 'cv::linemod::Detector::match'
这个报错可能是由于添加模板信息时没有指定模板的尺寸和深度导致的。你可以尝试在添加模板信息时指定模板的尺寸和深度,例如:
```
detector.addTemplate(template_gray, '1', img_size=template_gray.shape[::-1], depth=cv2.CV_8U)
```
其中,`img_size`参数指定模板图像的尺寸,`depth`参数指定模板图像的深度。这样可以确保匹配器能够正确地处理模板图像。
matches, scores = detector.match(image_gray,threshold=20)报错OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv_contrib\modules\rgbd\src\linemod.cpp:1397: error: (-215:Assertion failed) sources.size() == modalities.size() in function 'cv::linemod::Detector::match'
这个错误提示是在调用OpenCV的`cv::linemod::Detector::match`函数时出现了断言错误,具体是因为`sources`和`modalities`的大小不一致导致的。
根据OpenCV官方文档,这个函数的参数说明如下:
```
int cv::linemod::Detector::match(InputArrayOfArrays sources, float threshold, std::vector<Match>& matches, InputArray mask = noArray(), std::vector<int>* class_ids = NULL, std::vector<int>* template_ids = NULL, OutputArray quantized_image = noArray()) const
```
其中,`sources`是一个输入数组的数组,表示输入图像。每个输入数组都是一个包含了一个或多个渐变方向直方图的Mat对象。而`modalities`是一个由整数构成的向量,表示每个输入数组对应的模态。在`cv::linemod::Detector::addTemplate`函数中,每个添加的模板都会被分配一个模态,而`sources`中的每个输入数组都必须与之前添加的模板使用相同的模态。
因此,你需要检查一下你的代码中是否存在以下问题:
- `sources` 数组的大小和 `modalities` 向量的大小不一致。
- `sources` 数组中的某个输入数组使用了一个之前未定义的模态。
- `sources` 数组中的某些输入数组与之前添加的模板使用的模态不一致。
如果以上问题都不存在,那么你可能需要检查一下输入的图像数据是否正确,以及函数调用的其他参数是否正确。
阅读全文