python - 比较2种颜色直方图,其中一种是从txt文件加载的

标签 python numpy opencv

我正在尝试将图像的颜色直方图保存在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,而计算出的数组为float32cv2.compareHist()不喜欢。

将直方图保存为文本文件是否重要?因为您还可以使用np.savenp.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/

相关文章:

opencv - 如何向 OpenCV4Android 添加额外的模块?

Python HTTPS 代理隧道

python - 如果我使用 urlretrieve 和 urlopen 访问相同的 url,我最终会得到不同的文件。为什么?

python - 从三个 1D 数组创建 3D 曲面图

python - 如果我的行中的元素也为零,如何将整行设置为零?

python - 从 scipy 稀疏矩阵创建稀疏 RDD

c++ - 城市环境特征检测的最佳算法——OpenCV

python - 使用 BS4 python 进行抓取

python - 在 Bokeh 中绘制 300-400 个字形的最有效方法是什么?

python - 图像区域的直方图