Filtrer dans opencv / python

Nov 10 2020

J'essaie d'apprendre les filtres dans opencv et d'exécuter ce code. Mais le problème est que lorsque je lance le code, cela me donne une image presque sombre et me prévient avec "c: / Users / fazil / Desktop / Yeni Metin Belgesi (3) .py: 19: RuntimeWarning: débordement rencontré dans le résultat ubyte_scalars [ j, i, a] = int ((image [j, i, a] + image [j, i-1, a] + image [j, i + 1, a] + image [j + 1, i, a ] + image [j-1, i, a] + image [j + 1, i + 1, a] + image [j + 1, i-1, a] + image [j-1, i-1, a ] + image [j-1, i + 1, a]) / 9) ". Et si ı commentez-les et exécutez le code avec les lignes fonctionnant avec la méthode cv2.filter2d, cela me donne une image presque blanche. Je veux dire, ne doivent-ils pas faire la même chose, et ce filtre ne doit-il pas brouiller l'image? Voici mon code;

import cv2

image=cv2.imread(r"C:\Users\fazil\Desktop\c.png")
cv2.imshow("input",image)
cv2.cvtColor(image,cv2.CV_8U)
# kernel=np.array([
#     [1,1,1],
#     [1,1,1],
#     [1,1,1]
# ],np.float32)
# image=cv2.filter2D(image,-1,kernel)
def blur(image):
    height,width,channel=image.shape
    result=np.zeros(image.shape,image.dtype)
    for j in range(1,height-1):
        for i in range(1,width-1):
            for a in range(channel):
                result[j,i,a]=int((image[j,i,a]+image[j,i-1,a]+image[j,i+1,a]+image[j+1,i,a]+image[j-1,i,a]+image[j+1,i+1,a]+image[j+1,i-1,a]+image[j-1,i-1,a]+image[j-1,i+1,a])/9)
    return result

cv2.imshow("output",blur(image))
cv2.imwrite(r"C:\Users\fazil\Desktop\output.png",image)
cv2.waitKey()
cv2.destroyAllWindows()  ```

Réponses

1 fmw42 Nov 11 2020 at 19:45

Les deux méthodes suivantes fonctionnent pour moi dans Python OpenCV

Contribution:

import cv2
import numpy as np

image=cv2.imread("barn.jpg")
image=image.astype(np.float32)/255
#cv2.cvtColor(image,cv2.CV_8U)
kernel=np.array([
                [1,1,1],
                [1,1,1],
                [1,1,1]
                ],np.float32)
outimage1=cv2.filter2D(image,cv2.CV_32F,kernel)/9
outimage1=(255*outimage1).clip(0,255).astype(np.uint8)

def blur(image):
    height,width,channel=image.shape
    result=np.zeros(image.shape,dtype=np.float32)
    for j in range(1,height-1):
        for i in range(1,width-1):
            for a in range(channel):
                result[j,i,a]=(255*(image[j-1,i-1,a]+image[j-1,i,a]+image[j-1,i+1,a]+image[j,i-1,a]+image[j,i,a]+image[j,i+1,a]+image[j+1,i-1,a]+image[j+1,i,a]+image[j+1,i+1,a])/9)
    return result

outimage2 = blur(image)
outimage2 = outimage2.clip(0,255).astype(np.uint8)

cv2.imshow("input",image)
cv2.imshow("output1",outimage1)
cv2.imshow("output2",outimage2)
cv2.imwrite("barn_blur1.jpg",outimage1)
cv2.imwrite("barn_blur2.jpg",outimage2)
cv2.waitKey()
cv2.destroyAllWindows()

Méthode de flou 1:

Méthode de flou 2: