在opencv/python中过滤 [英] Filter in opencv/python
问题描述
我正在尝试在opencv中学习过滤器并运行此代码.但是问题是,当我运行代码时,它给我的图像几乎是暗的,并警告我 " c:/Users/fazil/Desktop/Yeni Metin Belgesi(3).py:19:RuntimeWarning:在ubyte_scalars中遇到溢出 结果[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] + image [j-1,i + 1,a])/9)". 而且如果我注释掉这些内容并使用cv2.filter2d方法的代码运行代码,它会给我几乎白色的图像.我的意思是,他们是否必须做同样的事情,并且过滤器会使图像模糊? 这是我的代码;
I am trying to learn filters in opencv and running this code. But the problem is that when ı run the code it gives me an almost dark image and warns me with "c:/Users/fazil/Desktop/Yeni Metin Belgesi (3).py:19: RuntimeWarning: overflow encountered in ubyte_scalars 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)". And if ı comment these out and run code with the lines working with cv2.filter2d method it gives me an almost whiite image. I mean, doesnt they have to do the same thing, and musnt that filter blur the image? Here's my 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() ```
推荐答案
以下两种方法在Python OpenCV中对我有用
The following two methods work for me in 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:
这篇关于在opencv/python中过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!