opencv / python에서 필터링
Nov 10 2020
나는 opencv에서 필터를 배우고이 코드를 실행하려고합니다. 그러나 문제는 내가 코드를 실행하면 거의 어두운 이미지를 제공하고 "c : / Users / fazil / Desktop / Yeni Metin Belgesi (3) .py : 19 : RuntimeWarning : overflow encounter in ubyte_scalars result [ j, i, a] = int ((이미지 [j, i, a] + 이미지 [j, i-1, a] + 이미지 [j, i + 1, a] + 이미지 [j + 1, i, a ] + 이미지 [j-1, i, a] + 이미지 [j + 1, i + 1, a] + 이미지 [j + 1, i-1, a] + 이미지 [j-1, i-1, a ] + 이미지 [j-1, i + 1, a]) / 9) ". 그리고 내가 이것을 주석 처리하고 cv2.filter2d 메서드로 작업하는 줄로 코드를 실행하면 거의 whiite 이미지를 제공합니다. 내 말은, 그들은 똑같은 일을해야하고 그 필터가 이미지를 흐릿하게 만들지 않습니까? 여기 내 코드가 있습니다.
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() ```
답변
1 fmw42 Nov 11 2020 at 19:45
다음 두 가지 방법은 Python OpenCV에서 나를 위해 작동합니다.
입력:
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()
블러 방법 1 :
블러 방법 2 :