Python 去除彩色图像的渐晕滤镜
我是Python OpenCV图像处理新手。我想删除图像的边框/轮廓阴影,如下所示。我选中了“”但它对我不起作用。这可能吗Python 去除彩色图像的渐晕滤镜,python,opencv,image-processing,Python,Opencv,Image Processing,我是Python OpenCV图像处理新手。我想删除图像的边框/轮廓阴影,如下所示。我选中了“”但它对我不起作用。这可能吗 您的边框/轮廓阴影问题让我想起了渐晕滤镜。如果你想了解更多,你可以看看这个。因此,本质上我们的任务是消除渐晕滤光片的影响,然后增加亮度 #####VIGNETTE import cv2 import numpy as np img = cv2.imread('Paris.jpg') height, width = img.shape[:2] original = img.
您的边框/轮廓阴影问题让我想起了渐晕滤镜。如果你想了解更多,你可以看看这个。因此,本质上我们的任务是消除渐晕滤光片的影响,然后增加亮度
#####VIGNETTE
import cv2
import numpy as np
img = cv2.imread('Paris.jpg')
height, width = img.shape[:2]
original = img.copy()
# generating vignette mask using Gaussian kernels
kernel_x = cv2.getGaussianKernel(width, 150)
kernel_y = cv2.getGaussianKernel(height, 150)
kernel = kernel_y * kernel_x.T
mask = 255 * kernel / np.linalg.norm(kernel)
# applying the mask to each channel in the input image
for i in range(3):
img[:, :, i] = img[:, :, i] * mask
cv2.imshow('Original', original)
cv2.imshow('Vignette', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
要对抗效果,请将img[:,:,i]=img[:,:,i]*mask
更改为img[:,:,i]=img[:,:,i]/mask
现在我们需要增加图像的亮度。为此,我们将图像转换为HSV,并增加饱和度和值矩阵的值。要更详细地了解它,您可以参考此
结果与原始明亮图像进行了比较
如果没有反向渐晕滤光片,结果会是什么样子。看起来像是使图像变亮吗?如果我只是使整个图像变亮,它会是什么样子。变亮是以相同的比率增加整个像素值。因此,如果您有一个暗部分的阈值,并以比正常比率小的比率减少它们的像素值。这可能会有很好的效果。我会试试看。谢谢,我也会试试,我也很好奇它会是什么样子。如果你取得了好成绩,请自己回答问题哦,哇。非常感谢。你比我快得多。结果看起来棒极了。谢谢你喜欢它!奇怪的表达式:mask=255*kernel/np.linalg.norm(kernel),为什么要使用frobenius norm?似乎您只需要将内核调整到0-1范围内,这就足够了。只需在kernel和calc kernel=(kernel min)/(max min)中查找最小值和最大值,或者使用cv.normalize和cv.NORM_MINMAX标志。如果我运行上面显示的
VIGNETTE
代码,出于某种原因,它会导致错误。有人有同样的经历吗?
#THE FULL CODE
import cv2
import numpy as np
img = cv2.imread('shadow.jpg')
original = cv2.imread('bright.jpg')
height, width = img.shape[:2]
# generating vignette mask using Gaussian kernels
kernel_x = cv2.getGaussianKernel(width, 150)
kernel_y = cv2.getGaussianKernel(height, 150)
kernel = kernel_y * kernel_x.T
mask = 255 * kernel / np.linalg.norm(kernel)
test = img.copy()
for i in range(3):
test[:, :, i] = test[:, :, i] / mask
hsv = cv2.cvtColor(test, cv2.COLOR_BGR2HSV)
hsv = np.array(hsv, dtype = np.float64)
hsv[:,:,1] = hsv[:,:,1]*1.3 ## scale pixel values up or down for channel 1(Lightness)
hsv[:,:,1][hsv[:,:,1]>255] = 255
hsv[:,:,2] = hsv[:,:,2]*1.3 ## scale pixel values up or down for channel 1(Lightness)
hsv[:,:,2][hsv[:,:,2]>255] = 255
hsv = np.array(hsv, dtype = np.uint8)
test = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imshow('Original_bright', original)
cv2.imshow('Original_dark', img)
cv2.imshow('Result', test)
cv2.waitKey(0)
cv2.destroyAllWindows()