繁体   English   中英

使用python和OpenCV进行图像增强

[英]Image enhancement with python and OpenCV

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

对于直方图均衡,我使用Wikipedia上的方法。

这是输入图像: 在此处输入图片说明

这是输出图像: 在此处输入图片说明

我真的不知道问题出在哪里,任何人都可以帮助我或给我一些提示吗?

下面是我的代码,

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.add()cv2.subtract()来获得与使用C ++相同的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM