调整图像大小后检测公差颜色
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();
我有一张图像,我尝试循环查找像素位置。
因此,如果它是 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();