我正在尝试在图像上定位某些项目。简化形式的图像如下所示:
我想获得第二个矩形顶部以及三个彩色矩形顶部的黑色粗体文本的(x,y)坐标。
我已经准备好面具,除了我无法弄清楚的黑色文字的面具。但是,文本始终位于矩形的顶部,因此,如果我能够找出底部大矩形的位置,那么我也将具有文本的位置。
这些是我得到的输出:
我尝试使用基于this comment的ConnectedComponents函数,但是除了对各种对象进行着色和分组之外,我没有设法继续前进,因此我没有在下面添加该代码片段以使内容尽可能清晰。
到目前为止,这是我的代码:
import cv2
import numpy as np
import imutils
PATH = "stackoverflow.png"
img = cv2.imread(PATH)
imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
mask_border = cv2.inRange(imgHSV,np.array([0,0,170]),np.array([0,0,175]))
mask_green = cv2.inRange(imgHSV,np.array([76,221,167]),np.array([76,221,167]))
mask_pink = cv2.inRange(imgHSV,np.array([168,41,245]),np.array([172,41,252]))
mask_red = cv2.inRange(imgHSV,np.array([4,207,251]),np.array([4,207,251]))
#mask_black = ???
all_masks = cv2.bitwise_or(mask_border, mask_green)
all_masks = cv2.bitwise_or(all_masks, mask_pink)
all_masks = cv2.bitwise_or(all_masks, mask_red)
cv2.imshow("Masks", all_masks)
imgResult = cv2.bitwise_and(img,img,mask=all_masks)
cv2.imshow("Output", imgResult)
cv2.waitKey(0)
最佳答案
您可以对图像进行二值化处理,然后应用一些形态学运算来获得正确的连接组件。这是一种方法。您可以对此进行微调以获得适当的输出。
import numpy as np
import cv2
import os
image=cv2.imread('path/to/image.jpg')
###binarising
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
ret2,th2 = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
###applying morphological operations to dilate the image
kernel=np.ones((3,3),np.uint8)
dilated=cv2.dilate(th2,kernel,iterations=3)
### finding contours, can use connectedcomponents aswell
_,contours,_ = cv2.findContours(dilated, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
### converting to bounding boxes from polygon
contours=[cv2.boundingRect(cnt) for cnt in contours]
### drawing rectangle for each contour for visualising
for cnt in contours:
x,y,w,h=cnt
cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
普通二进制图像图像放大
输出带有检测到的边界框