我有这个图像:https://i.stack.imgur.com/QqcsE.jpg
我试图得到图像的轮廓,但正如我们可以看到的:https://i.stack.imgur.com/WMktn.jpg在有眩光的地方,不画一些圆的轮廓。
我认为,如果我得到眩光在这张照片上,当我使用canny,边缘将被正确绘制?
我是openCV的新手,我在这里读了一些帖子并尝试了一些技术,但它根本不起作用。
注意:我在python中这样做有人能帮忙吗?非常感谢。
我先试了什么:
import cv2 as cv
img = cv.imread('Photos/board.jpg')
canny = cv.Canny(img, 125, 175)
contours, hierarchies = cv.findContours(canny, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)
blank = np.zeros(img.shape, dtype='uint8')
cv.drawContours(blank, contours, -1, (0,0,255),1)
cv.imshow('Contours drawn', blank)
结果: https://i.stack.imgur.com/OSSFE.jpg
第二次尝试稍微好一点,但结果中出现无用的东西
adaptive_thresh = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 13, 2)
cv.imshow('Adaptive thresholding', adaptive_thresh)
canny = cv.Canny(adaptive_thresh, 125, 175)
cv.imshow('Canny edges', canny)
结果(照片上出现了太多的白色像素:https://i.stack.imgur.com/ChZIc.jpg
我认为最简单的方法是像这样改变Canny检测的第二个值:
canny = cv.Canny(img, 25, 175)
下阈值(第二个参数)设置较低,则可以避免此眩光效果。更多信息在这里
从我的角度来看,你也可以在hsv空间工作,这是更舒适的,如果你想从图像中提取信息与这样的效果。更多关于hsv的信息。图3 (a)说明了一切。
这里是完整的代码,你有一些错误在你的(也许你使用旧的openv版本)
import numpy as np
img = cv.imread(r'C:UsersMyUserDesktopboard.jpeg')
canny = cv.Canny(img, 25, 175)
img2, contours, hierarchy = cv.findContours(canny, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)
blank = np.zeros(img.shape, dtype='uint8')
cv.drawContours(blank, contours, -1, (0,0,255),1)
cv.imshow('Contours drawn', blank)
cv.waitKey(0)
编辑:我还想告诉你,在这里很难使用提取的坐标。你最好使用圆检测和线检测来提取和使用板和冰球的坐标。