python - 彩色图像的直方图均衡使用python opencv给出错误

标签 python python-2.7 opencv

Error : Assertion failed (0 < cn && cn <= CV_CN_MAX) in merge

在合并函数中

cv2.merge(channels,img2)

如果参数被替换为如下所示:

cv2.merge(img2,channels)

不会报错,但是均衡前后的柱状图是一样的。我可以在这段代码中做什么。

代码:

import cv2,cv
import cv2.cv as cv
import numpy as np
from matplotlib import pyplot as plt

capture = cv.CaptureFromCAM(0)
img = cv.QueryFrame(capture)
img_size = cv.GetSize(img)

width,height = img_size
size = width,height,3
channels = np.zeros(size , np.uint8) 


while (1):
img = cv.QueryFrame(capture)
img = np.asarray(img[:,:])

cv2.imshow("original",img)
hist = cv2.calcHist([img],[2],None,[256],[0,256])

#convert img to YCR_CB
img2 = cv2.cvtColor(img,cv2.COLOR_BGR2YCR_CB)

#split image to Y, CR, CB
cv2.split(img2,channels)

#histogram equalization to Y-MATRIX
cv2.equalizeHist(channels[0],channels[0])

#merge this matrix to reconstruct our colored image
cv2.merge(channels,img2)

#convert this output image to rgb
rgb = cv2.cvtColor(img2,cv2.COLOR_YCR_CB2BGR)
hist2 = cv2.calcHist([rgb],[2],None,[256],[0,256])
plt.plot(hist)
plt.plot(hist2)
plt.show()

最佳答案

不使用 splitmerge,而是利用 numpy 切片。

img2[:, :, 0] = cv2.equalizeHist(img2[:, :, 0]) 
# or run a small loop over each channel

关于python - 彩色图像的直方图均衡使用python opencv给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23103139/

相关文章:

python - 交换numpy数组中的列?

python - 在迭代文档时存储 3 个不同的变量(字典或列表)?

python - 循环在两个字典中查找匹配值

c++ - OpenCV:去噪图像/视频帧

python - OpenCV python FlannBasedMatcher 添加多个描述符

python - 使用 python Popen 和 pandoc 解析 html 时不需要的新行?

python - 如何将行追加到 Gtk.ListStore?

python - 内存转储格式为 gdb 中的 xxd

python - 使用 Tkinter、进度条和队列

python - 灰度框架上的 numpy.where(),索引错误?