OpenCV'的掩码格式是什么;什么是Python ORB模块?

OpenCV'的掩码格式是什么;什么是Python ORB模块?,python,c++,opencv,Python,C++,Opencv,我一直在尝试使用ORB来查找关键点/描述符,我需要屏蔽图像的一部分,因为我的图像的两部分中有许多特征非常相似。但是,我无法确定detectandcompute函数的掩码参数的正确格式,并且文档对我来说是不明确的。我试着看源代码,但是我对C++的理解不够熟悉。我以为它只是一个二进制数组,其中1=use,0=ignore,但我尝试过的每个掩码都不会返回任何关键点。下面是一些示例代码: img1_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) img2_gr

我一直在尝试使用ORB来查找关键点/描述符,我需要屏蔽图像的一部分,因为我的图像的两部分中有许多特征非常相似。但是,我无法确定detectandcompute函数的掩码参数的正确格式,并且文档对我来说是不明确的。我试着看源代码,但是我对C++的理解不够熟悉。我以为它只是一个二进制数组,其中1=use,0=ignore,但我尝试过的每个掩码都不会返回任何关键点。下面是一些示例代码:

img1_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2_gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
#ignore the left half of the first image
mask1 = np.ones(img1_gray.shape)
mask1[:,:mask1.shape[1]/2] = 0
#ignore the right half of the second image
mask2 = np.ones(img2_gray.shape)
mask2[:,mask2.shape[1]/2:] = 0
kp1, des1 =orb.detectAndCompute(img1_gray,mask1)
kp2, des2 =orb.detectAndCompute(img2_gray,mask2)
文件如下:


ORB对于检测图像上的模式或查找图像副本非常有用,但对于此类任务,ORB的信息量可能不够,因为它设计为快速、轻量级的二进制描述符。尝试查看和

< P>我在OPENCV C++中使用ORB,如果我正确记得,这个掩码必须是CVY8UC1类型,值0和255(至少我用的是这个值)。你已经这样试过了吗

上面代码中的错误是掩码必须更改为Uint8。因此,这会将掩码更改为CV_8UC1类型,值为0到255。下面是使用SIFT特性而不是ORB特性的经过充分测试的Python工作代码(版本3):

import cv2
import numpy as np 
import matplotlib.pyplot as plt

def showing_features(img1, key_points):
   plt.imshow(cv2.drawKeypoints(img1, key_points, None))
   plt.show() 

img1 = cv2.imread('img1.jpg')
img2 = cv2.imread('img2.jpg')

img1_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2_gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

sift= cv2.xfeatures2d.SIFT_create(nfeatures=0,
                            nOctaveLayers=3,
                            contrastThreshold=0.05,
                            edgeThreshold=10.0,
                            sigma=1.6)

"*-------------- Create Masks --------------*"
mask1 = np.ones(img1_gray.shape)
#ignore the left half of the first image
mask1[:,:int(mask1.shape[1]/2)] = 0
#ignore the right half of the second image
mask2 = np.ones(img2_gray.shape)
mask2[:,int(mask2.shape[1]/2):] = 0

"*-------------- Change Masks to Uint8 --------------*"
mask1 = mask1.astype(np.uint8)
mask2 = mask2.astype(np.uint8)

"*-------------- Extract SIFT Features --------------*"
kp1m, des1m =sift.detectAndCompute(img1_gray,mask1)
kp2m, des2m =sift.detectAndCompute(img2_gray,mask2)

"*-------------- Display SIFT features after using MASK --------------*"
showing_features(img1, kp1m)
showing_features(img2, kp2m)

如果你包含一些代码和一些图片,可能会更好。谢谢我遇到的错误是,我提交了一个
CV_8UC3
类型的掩码。在Python包装器中,这不会引发任何错误,结果是检测器不会检测到任何兴趣点。尽管这可能是真的,但这并不能回答实际问题。