使用Opencv从python中的图片中删除小边缘

Posted

技术标签:

【中文标题】使用Opencv从python中的图片中删除小边缘【英文标题】:Remove little edges from picture in python with Opencv 【发布时间】:2018-05-17 15:45:51 【问题描述】:

我是 OpenCv 的新手。我正在尝试通过 Python 中的 OpenCV 创建一个黑白漫画家的人物图片。我在创作黑白卡通人物图片方面有点成功。但问题是,我想从输出图像中删除黑色小点。请帮我。我想删除图片中指出的这些黑点。 这是我的代码。

    image = cv2.imread('input1.jpg')
    img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    img_gray = cv2.medianBlur(img_gray, 5)
    edges = cv2.Laplacian(img_gray, cv2.CV_8U, ksize=5)
    ret,mask =cv2.threshold(edges,100,255,cv2.THRESH_BINARY_INV)
    image2 = cv2.bitwise_and(image, image, mask=mask)
    cv2.imshow("Mask", mask)

【问题讨论】:

您可以尝试再次对最终图像执行中值模糊 在我的答案中添加了一些代码,尝试在将图像转换为二进制后再次应用中值滤波器 :) 这孩子很吓人顺便说一句... 这孩子并不可怕。我的代码让他害怕。 【参考方案1】:

您需要使用 OpenCV 对图像应用滤镜以去除黑点(称为“噪点”)。您可以将许多 2D 卷积应用于图像。

Median Filter

此过滤器将找到每个像素及其周围像素的中值。它可以从中心收集尽可能多的像素来放大效果。

Gaussian Blur

您可以应用另一种类型的模糊处理来消除噪点,也许不能完全去除噪点,但肯定会降低噪点的效果。如果你正在处理黑白,看起来你就是这样,那么这实际上可能会完全消除噪音。

编辑

在应用阈值后再次尝试应用中值滤波器,这应该比以前更好地去除噪声,因为值是二进制的:

image = cv2.imread('input1.jpg')
img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
img_gray = cv2.medianBlur(img_gray, 5)
edges = cv2.Laplacian(img_gray, cv2.CV_8U, ksize=5)
ret,mask =cv2.threshold(edges,100,255,cv2.THRESH_BINARY_INV)
image2 = cv2.bitwise_and(image, image, mask=mask)
image2 = cv2.medianBlur(image2, 3)  # this
cv2.imshow("Mask", mask)

希望这会有所帮助!

【讨论】:

【参考方案2】:

您也可以尝试找到小计数并将它们绘制出来。像这样的:

img = cv2.imread('input1.jpg')
imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,220,255,0)
_, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
number_contours = len(contours)
print(number_contours)
for i in range(0, number_contours):
    lenght = cv2.contourArea(contours[i])
    if float(1)<lenght<float(5000):
        cv2.drawContours(img, contours[i], 0, (255,255,255), 7)
cv2.imshow("image", img)
cv2.imwrite("brez_pikic.jpg", img)

【讨论】:

以上是关于使用Opencv从python中的图片中删除小边缘的主要内容,如果未能解决你的问题,请参考以下文章

使用Python从OpenCV中扫描裁剪矩形照片

去除opencv和c++中的边界线

python OpenCV给视频去除水印

python OpenCV给视频去除水印

使用 OpenCV python 在一个窗口中结合多个 Canny 边缘检测

视觉检测使用opencv编写一个图片缺陷检测流程