【发布时间】:2020-05-07 03:43:40
【问题描述】:
]2下面的python代码在一张图片中只找到一个条形码。我需要找到图像中存在的多个条形码,不胜感激。提前致谢。
import numpy as np
import argparse
import imutils
import cv2
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True,
help = "path to the image file")
args = vars(ap.parse_args())
image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ddepth = cv2.cv.CV_32F if imutils.is_cv2() else cv2.CV_32F
gradX = cv2.Sobel(gray, ddepth=ddepth, dx=1, dy=0, ksize=-1)
gradY = cv2.Sobel(gray, ddepth=ddepth, dx=0, dy=1, ksize=-1)
gradient = cv2.subtract(gradX, gradY)
gradient = cv2.convertScaleAbs(gradient)
blurred = cv2.blur(gradient, (9, 9))
(_, thresh) = cv2.threshold(blurred, 225, 255, cv2.THRESH_BINARY)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (21, 7))
closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
closed = cv2.erode(closed, None, iterations = 4)
closed = cv2.dilate(closed, None, iterations = 4)
cnts = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
print(len(cnts))
#c = sorted(cnts, key = cv2.contourArea, reverse = True)[0]
c = max(cnts, key = cv2.contourArea)
rect = cv2.minAreaRect(c)
box = cv2.cv.BoxPoints(rect) if imutils.is_cv2() else cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(image, [box], -1, (0, 255, 0), 3)
cv2.imshow("Image", image)
cv2.waitKey(0)
【问题讨论】:
-
发布您的输入和输出图像,以便其他人可以测试您的代码。
-
另外,如果您说明源代码,当您从其他地方复制粘贴代码时会很好:github.com/sayands/opencv-implementations/blob/master/…
-
对不起,您链接的来源相同,github.com/sayands/opencv-implementations/blob/master/…,
-
现在,你能帮我解决这个问题吗?
-
如果你有多个轮廓,你需要遍历你的轮廓。我建议您显示您的关闭图像,以查看您的阈值是否已删除所有其他阈值或仅将其变为一个。为什么你会得到渐变边缘?为什么不只是水平模糊或使用水平形态学内核将条形码连接到一个连接区域。
标签: python opencv image-processing deep-learning