我正在尝试使用 OpenCV 检测这些填充的黑色矩形的位置。
我试图找到这些的轮廓,但我认为背景线也被检测为对象。此外,矩形没有完全分离(有时它们接触一个角),然后它们被检测为一个,但我想要它们每个的位置分开。
这是我从以下代码中得到的结果。
import numpy as np
import cv2
image = cv2.imread("page.jpg")
result = image.copy()
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,51,9)
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
cv2.drawContours(thresh, [c], -1, (255,255,255), -1)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=4)
cnts = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 3)
cv2.imshow('thresh', thresh)
cv2.imshow('opening', opening)
cv2.imshow('image', image)
cv2.waitKey()
如您所见,在打开的图像中,白色矩形与黑色矩形连接在一起,但我想要它们分开。然后在结果中,它只检测整个页面周围的轮廓。
我正在尝试检测这些填充的黑色矩形的位置 使用 OpenCV。
问题可以解决。
图片的质量分辨率非常低。图像周围有声音。最好拥有高分辨率相机。
我无法超越算法。
观察,我利用轮廓切片来获得最大的黑色矩形。
x,y,w,h = cv2.boundingRect(cnt[:9])
片段:
import cv2
# Load the image
img = cv2.imread('p1.jpg')
dst = cv2.fastNlMeansDenoisingColored(img, 5, None, 15, 14, 19)
# convert to grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edged = cv2.Canny(gray, 127, 255)
thresh = cv2.adaptiveThreshold(edged, 255, 1, 1, 37, 15)
thresh_color = cv2.cvtColor(thresh, cv2.COLOR_GRAY2BGR)
thresh = cv2.dilate(thresh, None, iterations=14)
thresh = cv2.erode(thresh, None, iterations=14)
contours,hierarchy = cv2.findContours(thresh,
cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
x,y,w,h = cv2.boundingRect(cnt[:9])
cv2.rectangle(img,
(x,y),(x+w,y+h),
(0,255,0),
-1)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
截图: