我正在尝试将图像的颜色直方图保存在txt文件中,以将其加载到其他脚本中。
这是我使用numpy
保存它们的方法:
imgx = cv2.imread('pruebas/pop.png')
imgx = cv2.cvtColor(imgx,cv2.COLOR_BGR2HSV)
histr_hx = cv2.calcHist([imgx],[0],None,[180],[0,179])
np.savetxt('h_hist.txt', histr_hx)
这也是我也用
numpy
加载它的方法:txtHist = np.loadtxt('h_hist.txt', ndmin=2)
我认为一切正常,因为当我打印histr_hx和txtHist时,它们都具有相同的结构,外观和类型。
问题是当我要使用此加载的直方图并将其与使用
cv2.compareHist()
的新直方图进行比较时,出现以下错误:> zh = cv2.compareHist(textHist,new_hist,cv2.HISTCMP_CORREL)
cv2.error: OpenCV(3.4.2) C:\Miniconda3\conda-bld\opencv-suite_1534379934306\work\modules\imgproc\src\histogram.cpp:1935: error: (-215:Assertion failed) H1.type() == H2.type() && H1.depth() == 5 in function
'cv::compareHist'
这两个直方图都具有相同的结构,箱数等。我不明白这是什么问题。
最佳答案
看来您加载的数组的类型为float64
,而计算出的数组为float32
,cv2.compareHist()
不喜欢。
将直方图保存为文本文件是否重要?因为您还可以使用np.save
和np.load
将数组另存为numpy binary files,这也可以保存数据的dtype
。这样,代码将如下所示:
imgx = cv2.imread('pruebas/pop.png')
imgx = cv2.cvtColor(imgx,cv2.COLOR_BGR2HSV)
histr_hx = cv2.calcHist([imgx],[0],None,[180],[0,179])
np.save('h_hist.npy', histr_hx)
txtHist = np.load('h_hist.npy')
cv2.compareHist(histr_hx, txtHist, cv2.HISTCMP_CORREL)
如果文本表示很重要,则可以将加载的数据转换为
histr_hx
的数据类型:cv2.compareHist(histr_hx, txtHist.astype(histr_hx.dtype), cv2.HISTCMP_CORREL)
关于python - 比较2种颜色直方图,其中一种是从txt文件加载的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62257680/