图像比较和返回百分比
int DiferentPixels = 0; Bitmap first = new Bitmap("First.jpg"); Bitmap second = new Bitmap("Second.jpg"); Bitmap container = new Bitmap(first.Width, first.Height); for (int i = 0; i < first.Width; i++) { for (int j = 0; j < first.Height; j++) { int r1 = second.GetPixel(i, j).R; int g1 = second.GetPixel(i, j).G; int b1 = second.GetPixel(i, j).B; int r2 = first.GetPixel(i, j).R; int g2 = first.GetPixel(i, j).G; int b2 = first.GetPixel(i, j).B; if (r1 != r2 && g1 != g2 && b1 != b2) { DiferentPixels++; container.SetPixel(i, j, Color.Red); } else container.SetPixel(i, j, first.GetPixel(i, j)); } } int TotalPixels = first.Width * first.Height; float dierence = (float)((float)DiferentPixels / (float)TotalPixels); float percentage = dierence * 100;
使用这部分代码我比较2个图像foreach Pixels和是它工作它返回的差异百分比,所以它比较第一个图像的每个像素与第二个图像的相同索引中的像素。但这里有什么问题,我有一个巨大的精度可能它不应该像那样,比较,也许有一些更好,更灵活的更好的算法。 所以任何人都有一个想法如何我可以改变比较,我应该继续,或者我应该比较每个像素的颜色或….
PS:如果有人有解决方案如何使这个代码并行,我也会接受它! 就像将它扩展到4个线程一样,它们会在四核中更快地完成吗?
一个明显的变化是每个Bitmap
只调用一次GetPixel
,然后直接使用返回的Color
结构:
for (int i = 0; i < first.Width; ++i) { for (int j = 0; j < first.Height; ++j) { Color secondColor = second.GetPixel(i, j); Color firstColor = first.GetPixel(i, j); if (firstColor != secondColor) { DiferentPixels++; container.SetPixel(i, j, Color.Red); } else { container.SetPixel(i, j, firstColor); } } }
对于速度,将图像调整为非常小的尺寸(例如16×12)并进行像素比较。 如果它是近似匹配,那么以更高的分辨率尝试它。
上述就是C#学习教程:图像比较和返回百分比分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/942818.html