用opencv去除眩光,保持边缘远离眩光

  • 本文关键字:边缘 远离 opencv python opencv
  • 更新时间 :
  • 英文 :


我有这个图像: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)

编辑:我还想告诉你,在这里很难使用提取的坐标。你最好使用圆检测和线检测来提取和使用板和冰球的坐标。

最新更新