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

Detect tolerance colors after resizing image

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

因此,如果它是 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我之前的问题怎么循环像素。

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

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