我正在寻找一种方法来比较2张图像并获得最匹配的图像作为输出。 在 OpenCV 中使用直方图功能可以这样做吗?
有人可以帮助我吗?
但我不知道怎么做,因为我对OpenCV不是很熟悉。 谢谢。
答案 0 :(得分:2)
直方图将确保两个图像具有相似的颜色分布。颜色分布在非常不同的图像中可能是相似的。
作为一个例子,想象一下黑白8x8棋盘和左侧全黑,骑行侧纯白的图像。这些图像具有相同的直方图。
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您的目标是找到最匹配的图像,那么OpenCV有一个函数cvMatchTemplate()来执行此操作。是否使用直方图匹配,但不需要在代码中声明任何其他内容。可以找到最匹配匹配模板的图像部分以及文档中提供的其他变体。
答案 3 :(得分:0)
对于每个图像计算HSV直方图:
Mat src_mat = imread("./image.jpg");
Mat hsv_mat;
cvtColor( src_mat, hsv_mat, CV_BGR2HSV );
MatND HSV_histogram;
int histSize[] = { 240, 240 };
float h_ranges[] = { 0, 255 };
float s_ranges[] = { 0, 180 };
const float* ranges[] = { h_ranges, s_ranges };
int channels[] = { 0, 1 };
calcHist( &hsv_mat, 1, channels, Mat(), HSV_histogram, 2, histSize, ranges, true, false );
normalize( HSV_histogram, HSV_histogram, 0, 1, NORM_MINMAX, -1, Mat() );
然后进行成对比较并得到相似度得分:
double score_ij = compareHist( HSV_histogram_i, HSV_histogram_j, CV_COMP_BHATTACHARYYA );
您可以通过在较小的区域划分图像并平均结果来提高准确度。