Python 使用opencv消除眩光并保持边缘远离眩光
我有这样的图像: 我正试图得到图像的轮廓,但正如我们在这里看到的: 在有眩光的地方,一些圆的轮廓不会被画出来 我假设如果我在这张照片上消除了眩光,当我使用canny时,边缘将正确绘制 我是openCV新手,我在这里读过一些帖子,并尝试了一些技术,但根本没有成功 注意:我是用python做这件事的 有人能帮忙吗?非常感谢 我首先尝试的内容:Python 使用opencv消除眩光并保持边缘远离眩光,python,opencv,Python,Opencv,我有这样的图像: 我正试图得到图像的轮廓,但正如我们在这里看到的: 在有眩光的地方,一些圆的轮廓不会被画出来 我假设如果我在这张照片上消除了眩光,当我使用canny时,边缘将正确绘制 我是openCV新手,我在这里读过一些帖子,并尝试了一些技术,但根本没有成功 注意:我是用python做这件事的 有人能帮忙吗?非常感谢 我首先尝试的内容: import cv2 as cv img = cv.imread('Photos/board.jpg') canny = cv.Canny(img, 12
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)
结果:
第二次尝试会更好一些,但结果中会出现无用的东西
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)
结果(照片上出现的白色像素太多:我认为最简单的方法是更改Canny检测的第二个值,如下所示:
canny=cv.canny(img,25175)
下限阈值(第二个参数)设置得越低,则可以避免这种眩光效果。详细信息
从我的观点来看,你也可以在hsv空间中工作,如果你想从这样效果的图像中提取信息,那么hsv空间会更加舒适。更多关于的信息。图3 a)说明了这一点
这是完整的代码,您的代码中有一些错误(可能您使用的是旧的opencv版本)
编辑:我还想告诉你,这里很难使用提取的坐标。您最好使用和来提取和使用棋盘和冰球的坐标。请发布您的代码或部分代码。在使用cv2.findContours之前,您的cv2.threshold参数是什么?@Panda50添加了更多信息,谢谢:)谢谢您的回答,使用这些设置肯定会更好,而且还需要识别冰球颜色。您推荐某种工具吗?非常感谢。要获得颜色,您需要进入hsv(当然)。然后,如果一组颜色总是相同的,你可以在上面加上遮罩,看看你的冰球在哪里。下面是一个很好的教程,教您如何处理颜色:
import numpy as np
img = cv.imread(r'C:\Users\MyUser\Desktop\board.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)