Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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和OpenCV进行图像增强_Python_Image Processing_Rgb_Yuv - Fatal编程技术网

使用python和OpenCV进行图像增强

使用python和OpenCV进行图像增强,python,image-processing,rgb,yuv,Python,Image Processing,Rgb,Yuv,我试图通过首先将RGB颜色空间转换为YUV颜色空间并对Y值进行直方图均衡化来增强图像。但是,输出图像看起来不太好 对于直方图均衡化,我使用上找到的方法 以下是输入图像: 以下是输出图像: 我真的不知道问题出在哪里,谁能帮我或给我一些提示吗 下面是我的代码 import cv2 import numpy as np img = cv2.imread('/Users/simon/Documents/DIP/Homework_3/input4.bmp') shape = img.shape Y

我试图通过首先将
RGB
颜色空间转换为
YUV
颜色空间并对
Y
值进行直方图均衡化来增强图像。但是,输出图像看起来不太好

对于直方图均衡化,我使用上找到的方法

以下是输入图像:

以下是输出图像:

我真的不知道问题出在哪里,谁能帮我或给我一些提示吗

下面是我的代码

import cv2
import numpy as np

img = cv2.imread('/Users/simon/Documents/DIP/Homework_3/input4.bmp')
shape = img.shape

Y_origin_hist = [0] * 256
U_origin = [[0 for i in range(0, shape[1])] for j in range(0, shape[0])] 
V_origin = [[0 for i in range(0, shape[1])] for j in range(0, shape[0])] 

Y_hist = [0] * 256

# Read RGB value and calculate YUV value
for i in range(0, shape[0]) :
    for j in range(0, shape[1]) :
        px = img[i,j]
        y = int(0.299 * px[2] + 0.587 * px[1] + 0.114 * px[0])
        u = int(-0.169 * px[2] - 0.331 * px[1] + 0.5 * px[0]) + 128
        v = int(0.5 * px[2] - 0.419 * px[1] - 0.081 * px[0]) + 128
        Y_origin_hist[y] = Y_origin_hist[y] + 1
        U_origin[i][j] = u
        V_origin[i][j] = v

# Histogram equalization
for i in range(0, 256) :
    Y_hist[i] = int(((sum(Y_origin_hist[0:i]) - min(Y_origin_hist) - 1) * 255) / ((shape[0] * shape[1]) - 1))

# Write back to RGB value
for i in range(0, shape[0]) :
    for j in range(0, shape[1]) :
        px = img[i,j]
        px[0] = int(Y_hist[px[0]] + 1.77216 * (U_origin[i][j] - 128) + 0.00099 * (V_origin[i][j] - 128))
        px[1] = int(Y_hist[px[1]] - 0.3437 * (U_origin[i][j] - 128) - 0.71417 * (V_origin[i][j] - 128))
        px[2] = int(Y_hist[px[2]] - 0.00093 * (U_origin[i][j] - 128) + 1.401687 * (V_origin[i][j] - 128))

cv2.imwrite('/Users/simon/Documents/DIP/Homework_3/output4.bmp', img)

对于C++中的OpenCV,++和-运算符重载,它们自动防止溢出。但是,使用Python时并非如此。因此,在做数学运算时,应该使用<代码> CV2..Adv> /Cudio>和 CV2..CaseTuffTo()/Cuth>,以获得与C++相同的结果。您需要将
px[]
剪裁到范围0..255。另外,我不确定使用原始的
px[]
值来索引LUT是否有意义,以及每次添加色差分量是否有意义?