如何将通过OpenCV calcHist生成的两个一维直方图合并为一个?
合并OpenCV一维直方图的几种方法
嘿,我来帮你搞定这个问题!你现在用calcHist生成了两个一维直方图g_hist和r_hist,它们都是256行1列的单通道Mat(数据类型默认是float)。要把它们合并,有几种常用的方式,你可以根据自己的需求来选:
1. 横向拼接(生成256×2的单通道Mat)
这种方式会把两个直方图并排放在一起,形成一个每行包含两个直方图对应位置数值的矩阵,适合对比同一位置的数值:
Mat combined_hist; hconcat(g_hist, r_hist, combined_hist);
2. 纵向拼接(生成512×1的单通道Mat)
如果想把两个直方图的数值首尾相接,变成一个更长的一维数组,就用纵向拼接:
Mat combined_hist; vconcat(g_hist, r_hist, combined_hist);
3. 合并为多通道Mat(生成256×1的2通道Mat)
要是你想把两个直方图作为独立的通道保留,生成一个多通道的矩阵,可以用merge函数:
vector<Mat> hist_vector; hist_vector.push_back(g_hist); hist_vector.push_back(r_hist); Mat combined_hist; merge(hist_vector, combined_hist);
小提示
不管用哪种方式,合并前要确保两个直方图的数据类型一致(你的情况里都是calcHist输出的float类型,所以没问题),否则可能会报错哦。
内容的提问来源于stack exchange,提问作者user7303261
相关产品推荐
相关产品推荐

