Saring di opencv / python

Nov 10 2020

Saya mencoba mempelajari filter di opencv dan menjalankan kode ini. Tapi masalahnya adalah ketika saya menjalankan kode itu memberi saya gambar yang hampir gelap dan memperingatkan saya dengan "c: / Users / fazil / Desktop / Yeni Metin Belgesi (3) .py: 19: RuntimeWarning: overflow ditemui di hasil ubyte_scalars [ j, i, a] = int ((gambar [j, i, a] + gambar [j, i-1, a] + gambar [j, i + 1, a] + gambar [j + 1, i, a ] + gambar [j-1, i, a] + gambar [j + 1, i + 1, a] + gambar [j + 1, i-1, a] + gambar [j-1, i-1, a ] + gambar [j-1, i + 1, a]) / 9) ". Dan jika saya mengomentari ini dan menjalankan kode dengan baris yang bekerja dengan metode cv2.filter2d itu memberi saya gambar yang hampir putih. Maksud saya, bukankah mereka harus melakukan hal yang sama, dan bukankah filter itu mengaburkan gambar? Ini kode saya;

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

Jawaban

1 fmw42 Nov 11 2020 at 19:45

Dua metode berikut bekerja untuk saya dengan Python OpenCV

Memasukkan:

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

Metode Blur 1:

Metode Blur 2: