gpt4 book ai didi

python - 检测嘈杂的背景/物体 - OpenCV

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:45 28 4
gpt4 key购买 nike

我正在尝试检测一张卡片,但问题是有时图像不好并且有多个背景,如下所示:

没有很好地定义边缘

![没有很好地定义边缘][1]

示例背景

![示例背景][2]

我这样做了:

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray,(11,11),0)

edg = cv2.Canny(gray, 10, 20)
contours,_ = cv2.findContours(edg.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(image,contours,-1,[0,255,0],2)

cv2.imshow('image',image)
cv2.waitKey(0)

但有时他会检测到其他东西,而不是卡片。任何人都知道如何解决这个问题?我尝试过使用 YOLO 进行对象检测,但这很难

最佳答案

首先要注意的是,拍照时有一些条件,比如光线条件和介质条件,如果你能控制它们,图像处理部分的负荷就会减少。例如在你的示例图像中,你可以将A4白纸放在背景中以减少小轮廓等(当然不可能改变条件)。

好吧,我用这段代码试试你的测试图像:

import cv2

rectKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (8, 8))
sqKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (17, 17))

img = cv2.imread('edge.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)


gradX = cv2.Sobel(gray, ddepth=cv2.CV_32F, dx=1, dy=0,
ksize=-1)

morph1 = cv2.morphologyEx(gradX, cv2.MORPH_OPEN, rectKernel)
morph2 = cv2.morphologyEx(morph1, cv2.MORPH_CLOSE, sqKernel)


cv2.imshow("img",img)
cv2.imshow("gradx",gradX)
cv2.imshow("tophat",morph1)
cv2.imshow("tophat2",morph2)
cv2.waitKey()

结果如下:

Sobel morph1 morph2

您可以使用轮廓并使用轮廓属性删除不需要的轮廓:Contour Properties

关于python - 检测嘈杂的背景/物体 - OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57606845/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com