[英]How to ignore part of a image during feature extraction in OpenCV?
我正在嘗試從矩形圖像中提取特征。 但我想忽略圖像的某些部分,這樣就不會從圖像內部的這些區域中提取任何特征。 我可以想到兩種方法。
a) 從整個圖像中獲取特征並使用關鍵點丟棄位於被忽略區域內的特征。 但是這種方法不是首選,因為我限制了從圖像中提取的最大特征數,稍后丟棄將無助於獲得恆定數量的特征。
b) 將圖像該部分的像素設為 numpy 零。 但我認為 SIFT/ORB 或其他特征提取算法可能會將其檢測為黑色矩形,並在這個黑色框的邊緣部分錯誤地創建特征。 雖然不確定這一點。
有人可以確認問題陳述的最佳方法嗎?
您有兩種檢測圖像選定部分特征的方法。
方法一:
通過選擇投資回報率。 這種方法的缺點是計算出的特征點將具有 ROI 的坐標。 例如,如果您有一張尺寸為width = 400, height = 400
,您選擇了一個暗度為x=0, y=0, width=100, height=100
的 ROI,關鍵點將具有根據 ROI 暗度的坐標. 您必須手動將它們映射回原始圖像大小。
img = cv2.imread("image.jpg", -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# select and ROI with user specified dimensions
roi = gray[50:150,50:150]
sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(roi)
img=cv2.drawKeypoints(roi,kp,img)
方法二:
為篩選特征檢測器方法提供掩碼。 掩碼必須是單通道、無符號字符圖像。
img = cv2.imread("image.jpg", -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# create a mask image filled with zeros, the size of original image
mask = np.zeros(img.shape[:2], dtype=np.uint8)
# draw your selected ROI on the mask image
cv2.rectangle(mask, (50,50), (150,150), (255), thickness = -1)
sift = cv2.xfeatures2d.SIFT_create()
# provide mask to the detect method
kp = sift.detect(gray,mask)
img=cv2.drawKeypoints(gray,kp,img)
這取決於你有多少區域。 對於相對較少的區域,您可以只使用 ROI(感興趣區域)
https://www.learnopencv.com/how-to-select-a-bounding-box-roi-in-opencv-cpp-python/
您可以定義矩形區域並計算每個區域的特征。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.