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

时间:2018-05-17 15:45:52

标签: python opencv image-processing computer-vision

我是OpenCv的新手。我试图通过OpenCV在python中创建一个白色和黑色漫画家的人物图片。我有点成功,在创造人的黑白卡通型图片。但问题是,我想从输出图像中删除黑色小点。请帮我。我想删除这些黑点,如图所示。 这是我的代码。

    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)

enter image description here

2 个答案:

答案 0 :(得分:2)

您需要使用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)

希望这有帮助!

答案 1 :(得分:0)

你也可以尝试找一些小计数器并将它们画出来。像这样:

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)

enter image description here