Filtern Sie in opencv / python

Nov 10 2020

Ich versuche, Filter in opencv zu lernen und diesen Code auszuführen. Das Problem ist jedoch, dass beim Ausführen des Codes ein fast dunkles Bild angezeigt wird und ich mit "c: / Users / fazil / Desktop / Yeni Metin Belgesi (3) .py: 19: RuntimeWarning: Überlauf in ubyte_scalars result [ j, i, a] = int ((Bild [j, i, a] + Bild [j, i-1, a] + Bild [j, i + 1, a] + Bild [j + 1, i, a ] + Bild [j-1, i, a] + Bild [j + 1, i + 1, a] + Bild [j + 1, i-1, a] + Bild [j-1, i-1, a ] + Bild [j-1, i + 1, a]) / 9) ". Und wenn ich diese auskommentiere und Code mit den Zeilen ausführe, die mit der Methode cv2.filter2d arbeiten, bekomme ich ein fast weißes Bild. Ich meine, müssen sie nicht dasselbe tun und müssen diese Filter das Bild nicht verwischen? Hier ist mein 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()  ```

Antworten

1 fmw42 Nov 11 2020 at 19:45

Die folgenden zwei Methoden funktionieren für mich in Python OpenCV

Eingang:

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()

Unschärfemethode 1:

Unschärfemethode 2: