我有一本书的图像
:
我需要画出它的轮廓。我试过这个:
1.使其变灰
1.模糊
1.阈
1.使用findContours()查找等值线
但它不工作!我认为这一切都取决于顶部的蓝色部分,所以我试图改变它的颜色为书的颜色与cv.inRange()
,但它没有工作,轮廓仍然不清楚。然后我试图改变背景色(表的颜色)为绿色,再试一次。它工作得很好,但只有对该图像,如果我改变背景,它不工作
有时候轮廓线还包括"M"字母,可能是因为它靠近边缘
有什么办法吗?
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
gray = cv.GaussianBlur(gray, (5, 5), 0)
#at this step I also tried using cv2.Canny(gray, 75, 200)
thresh = cv.adaptiveThreshold(blurred, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY_INV, 21, 10)
#I also tried usual threshold and THRESH_BINARY, but it works worse
contours, _ = cv.findContours(thresh, cv.RETR_LIST, cv.CHAIN_APPROX_TC89_KCOS)
1条答案
按热度按时间v8wbuo2f1#
我终于设法做到了我想要的这里有一些提示,如果你有同样的问题:
1.不要太过模糊,使用对比度图像会使情况更糟
1.不要依赖于内置函数。对我有效的是使用形态学操作而不是使用Canny()。https://ietresearch.onlinelibrary.wiley.com/doi/full/10.1049/joe.2018.9113-关于改进Canny()的文章
1.尝试改变内核以找到完美的组合
1.使用阈值类型
1.如果阈值处理效果不佳,请考虑应用蒙版以清除背景x1c 0d1x