Drawing Histogram in OpenCV-Python
You should copy the array:
b,g,r = img[:,:,0].copy(), img[:,:,1].copy(), img[:,:,2].copy()
But, since calcHist() can accept channels parameter, you need not to split your img to three array.
import cv2import numpy as npimg = cv2.imread('zzzyj.jpg')h = np.zeros((300,256,3))bins = np.arange(256).reshape(256,1)color = [ (255,0,0),(0,255,0),(0,0,255) ]for ch, col in enumerate(color): hist_item = cv2.calcHist([img],[ch],None,[256],[0,255]) cv2.normalize(hist_item,hist_item,0,255,cv2.NORM_MINMAX) hist=np.int32(np.around(hist_item)) pts = np.column_stack((bins,hist)) cv2.polylines(h,[pts],False,col)h=np.flipud(h)cv2.imshow('colorhist',h)cv2.waitKey(0)