不要看看這種方法。它不是很整潔,但你可以改進它來滿足你的需求。
我獲得使用cv2.ORB_create()
給定的圖像,爲此,我得到這個關鍵點:
img = cv2.imread(filename,0)
orb = cv2.ORB_create()
kp = orb.detect(img,None)
kp, des = orb.compute(img, kp)
img2 = cv2.drawKeypoints(img,kp,None,color=(0,255,0), flags=0)
cv2.imshow('keypoint_on_text.jpg', img2)
可以使用surf
更好的檢測關鍵點。
然後,我獲得了具有與圖像相同形狀的純色(在這種情況下爲黑色)的圖像。我在這張黑色的圖像上畫出了這些獲得的關鍵點。
mask = np.zeros((img.shape[0], img.shape[1], 3), np.uint8)
mask[:] = (0, 0, 0)
fmask = cv2.drawKeypoints(mask,kp,None,color=(0,255,0), flags=0)
cv2.imshow('fmask.jpg', fmask)
現在我轉換這對灰度圖像和應用的閾值進行二值化它。然後我在這幅圖像上找到了輪廓,並以更大的半徑繪製輪廓。
graymask = cv2.cvtColor(fmask,cv2.COLOR_BGR2GRAY)
ret, th = cv2.threshold(graymask, 50, 255, 0)
_, contours , _= cv2.findContours(th,2,1)
rep = cv2.drawContours(fmask, contours, -1, (0,255,0), 5)
cv2.imshow('contours.jpg',rep)
我轉換這灰度,二值化,並與原始圖像掩蓋它,最終得到這樣的:
repmask = cv2.cvtColor(rep,cv2.COLOR_BGR2GRAY)
ret, th1 = cv2.threshold(repmask, 50, 255, 0)
res = cv2.bitwise_and(img,img,mask = th1)
cv2.imshow('Only_Text.jpg',res)
正如你所看到的,某些所需文本的部分是可見的。如果您使用surf
檢測,您將能夠獲取更多部分的文本。
爲此,您可能還需要在上下文中標識對象。然後,如果「關鍵點」位於檢測到的對象內,則可以突出顯示該特定對象。 –
如何識別上下文中的對象? –
您可以上傳您正在使用的示例圖片嗎 –