m3h*_*h0w 5 python opencv types sift feature-detection
我正在使用OpenCV3在Python3中构建一个简单的项目,试图将拼图碎片与“完成的”拼图图像进行匹配。我已经使用SIFT开始了测试。
我可以提取拼图碎片的轮廓并裁剪图像,但是由于大多数高频信号当然都位于碎片周围(碎片结束且地板开始的位置),因此我想将蒙版传递给SIFT detectAndCompute( )方法,从而迫使算法仅在片段内寻找关键点。
test_mask = np.ones(img1.shape, np.uint8)
kp1, des1 = sift.detectAndCompute(img1, mask = test_mask)
Run Code Online (Sandbox Code Playgroud)
通过测试掩码(以确保它为uint8)后,出现以下错误:
kp1,des1 = sift.detectAndCompute(img1,mask = test_mask)cv2.error:/home/pyimagesearch/opencv_contrib/modules/xfeatures2d/src/sift.cpp:772:错误:(-5)掩码类型不正确(!= CV_8UC1)在函数detectAndCompute中
根据我的研究,uint8只是CV_8U的别名,与CV_8UC1相同。在Python中找不到将掩码传递给任何特征检测算法的代码示例。
感谢 Miki 我设法找到了一个错误。
结果证明,我使用阈值操作创建的原始蒙版,即使看起来是二进制的,也是一个 3 通道图像([rows], [cols], 3)。因此它不能被接受为面具。
检查类型和形状后(必须是 uint8 和 [rows,cols,1]):
print(mask.dtype)
print(mask.shape)
Run Code Online (Sandbox Code Playgroud)
如果仍然是 3 通道,则将蒙版转换为灰色:
mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3033 次 |
| 最近记录: |