Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 去除彩色图像的渐晕滤镜_Python_Opencv_Image Processing - Fatal编程技术网

Python 去除彩色图像的渐晕滤镜

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.

我是Python OpenCV图像处理新手。我想删除图像的边框/轮廓阴影,如下所示。我选中了“”但它对我不起作用。这可能吗


您的边框/轮廓阴影问题让我想起了渐晕滤镜。如果你想了解更多,你可以看看这个。因此,本质上我们的任务是消除渐晕滤光片的影响,然后增加亮度

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