调整图像大小后检测公差颜色

Posted

技术标签:

【中文标题】调整图像大小后检测公差颜色【英文标题】:Detect tolerance colors after resizing image 【发布时间】:2015-03-03 16:15:56 【问题描述】:

我有一个图像,我尝试循环查找像素位置。

所以如果是层 1000px x 1000px 那么我看到这张图片(我只是展示图片的片段,我希望它足以理解):

但是如果我将图像调整为 300px x 300px,它看起来像这样(也只是显示图像片段):

所以你可以在缩小尺寸后看到我们有一个额外的像素,不仅仅是紫色和绿色,还有两种颜色之间的渐变。但是我编写的程序试图找出绿色和紫色的像素位置,所以我只使用 2 种颜色来找到合适的位置。在不调整我的程序大小的情况下可以很好地检测到它,但是在此处调整大小后,检测到适当的颜色位置会出现问题。

在 Photoshop 中,如果您使用例如容差 100 并取消选中抗锯齿复选标记,它可以正常工作并且即使使用渐变也能找到正确的位置。

如何在我的代码中实现容错。例如,我有绿色,我需要与所有公差颜色进行比较。而如果像素100%容忍绿色,程序应该假设像素连接到绿色。

我的意思。例如,我有 RGB (0, 255, 0) 颜色,我想找到它的所有容差。在这种情况下为绿色。

或者例如,如果我有 RGB (100, 255, 50),那么我需要找到它的所有容差颜色。

我想这里应该是我可以设置的范围和检查公差颜色的颜色。

另外,我使用原始数据循环所有像素。所以我可以得到RGBA:

            float red   = (rawData[byteIndex]     * 1.0) / 255.0;
            float green = (rawData[byteIndex + 1] * 1.0) / 255.0;
            float blue  = (rawData[byteIndex + 2] * 1.0) / 255.0;
            float alpha = (rawData[byteIndex + 3] * 1.0) / 255.0;

所以检测纯色工作完美,但我有疑问如何识别该渐变并确定颜色是连接到绿色还是紫色。

Here is also我之前的问题如何循环像素。

【问题讨论】:

您使用哪种算法来调整图像大小? @holex,我用这个***.com/questions/2658738/…,但如果有任何算法可以通过保存相同颜色来改变大小,我不需要片段之间的渐变。 【参考方案1】:

听起来您在调整大小时遇到​​了插值问题。如果您关闭插值,您将不会在图像中添加任何新颜色。

UIGraphicsBeginImageContext(newSize);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationNone);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

【讨论】:

感谢您的回答,这是我的周期如何找到位置和需要的像素***.com/questions/28609108/… 所以这只是比较颜色,但我需要知道如何找到所有容差像素并比较它是否需要像素。如您所见,我只是将字典中的十六进制颜色与从原始数据中获得的像素进行比较,但我不仅需要使用十六进制颜色,还需要使用范围。 我显然不明白你的问题。你不只是想调整图像的大小吗? 我想调整图像大小,但就像 Photoshop 中的最近邻硬边一样。所以我没有额外的渐变。只是硬边。 您不只是使用drawInRect 来调整大小吗? ok 看起来很完美,我只看到硬边而不是渐变。

以上是关于调整图像大小后检测公差颜色的主要内容,如果未能解决你的问题,请参考以下文章

使用ImageMagick调整索引的PNG图像大小,同时保留颜色贴图

目标检测系列 Mask R-CNN—图片预处理

调整图像大小并填充短边

背景感知文本颜色

imagecreatefromstring 改变图像颜色

使用 OpenCV(基于霍夫变换或其他特征)编写鲁棒的(颜色和大小不变)圆检测