我对处理语言很陌生。我正在尝试创建一个图像比较工具。
想法是获得图片的直方图(参见下面的截图,尺寸为600x400),然后将其与其他10个相似图片的直方图(所有尺寸600x400)进行比较。直方图显示灰度级的频率分布,左侧显示纯黑值的数量,右侧显示纯白值的数量。
最后我应该得到一个"赢得"图片(具有最相似直方图的图片)。
下面您可以看到图像直方图的代码,类似于处理教程示例。
我的想法是为其他10张图片创建PImage []
以创建直方图,然后创建if语句,但我不确定如何编码它。
有没有人知道如何继续或在哪里看?我找不到类似的帖子。
如果问题非常基本,请提前致谢并抱歉!
size(600, 400);
// Load an image from the data directory
// Load a different image by modifying the comments
PImage img = loadImage("image4.jpg");
image(img, 0, 0);
int[] hist = new int[256];
// Calculate the histogram
for (int i = 0; i < img.width; i++) {
for (int j = 0; j < img.height; j++) {
int bright = int(brightness(get(i, j)));
hist[bright]++;
}
}
// Find the largest value in the histogram
int histMax = max(hist);
stroke(255);
// Draw half of the histogram (skip every second value)
for (int i = 0; i < img.width; i += 2) {
// Map i (from 0..img.width) to a location in the histogram (0..255)
int which = int(map(i, 0, img.width, 0, 255));
// Convert the histogram value to a location between
// the bottom and the top of the picture
int y = int(map(hist[which], 0, histMax, img.height, 0));
line(i, img.height, i, y);
}
答案 0 :(得分:1)
不确定您的问题是处理中的实施,还是您不知道如何比较直方图。我认为这是比较,因为其余部分非常直接。计算每个候选人的相似度并选出获胜者。
在网上搜索直方图比较,您会发现: http://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/histogram_comparison/histogram_comparison.html
OpenCV实现了四种直方图相似性度量。
相关性
或
卡方
或
交叉口
或
巴氏 - 距离
您可以使用这些措施,但我相信您也会找到其他内容。