如何查找黑色像素位置
How to find Black Pixel locations
我正在做一个奇怪的项目。我有一个激光切割机,我正在用它(用金属)制作模板。我可以使用坐标对机器进行编程以剪切某个图像,但我想知道的是:我如何编写一个程序,获取黑白扫描图像,并给我黑色区域的坐标?我不介意它是否提供每个像素,即使我只需要外部线条,我也可以完成这部分。
我已经搜索了一段时间,但这个问题有太多的单词和很多结果,比如颜色和像素,我发现了很多不相关的信息。我想使用C++或C#,但我可以使用任何语言,包括脚本。
我在C#
:中使用了GetPixel
public List<String> GetBlackDots()
{
Color pixelColor;
var list = new st<String>();
for (int y = 0; y < bitmapImage.Height; y++)
{
for (int x = 0; x < bitmapImage.Width; x++)
{
pixelColor = bitmapImage.GetPixel(x, y);
if (pixelColor.R == 0 && pixelColor.G == 0 && pixelColor.B == 0)
list.Add(String.Format("x:{0} y:{1}", x, y));
}
}
return list;
}
如果我们假设扫描的图像是完全白色和完全黑色的,并且没有中间颜色,那么我们可以将图像作为rgb值的数组,并简单地扫描0值。如果值为0,它一定是黑色的,对吗?然而,图像可能不是完全黑色的,所以你需要一些活动空间。
然后你做的事情看起来像这样:
for(int i = 0; i < img.width; i++){
for(int j = 0; j < img.height; j++){
// 20 is an arbitrary value and subject to your opinion and need.
if(img[i][j].color <= 20)
//store i and j, those are your pixel location
}
}
现在,如果你使用C#,导入大多数图像格式,将它们粘贴在数组中,并获得结果将很容易。但如果你想要更快的结果,你最好使用C++。
这种快捷方式完全依赖于非常极端的图像值。如果你的图像中有很大一部分是灰色的,那么这种方法的准确性就很糟糕。
虽然有许多语言的解决方案,但我将概述一个我自己可能会使用的简单解决方案。Python有一个很棒的映像库,名为PIL(Python imaging library-http://www.pythonware.com/products/pil/)它可以很容易地完成你需要的东西。
下面是一个可以帮助你入门的例子。
image = Image.open("image.png")
datas = image.getdata()
for item in datas:
if item[0] < 255 and item[1] < 255 and item[2] < 255 :
// THIS PIXEL IS NOT WHITE
当然,这将计算任何不是完全白色的像素,您可能需要添加一些填充,这样非完全白色的象素也会被视为白色。您还必须跟踪当前正在查看的像素。
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 在 OpenCV 和 C++ 中查找距轮廓中心最近的黑色像素
- GDI+:如何将黑色像素替换为红色像素
- 如何查找黑色像素位置
- 从HWND获取并保存位图(每个像素8,4,1位-黑色图像)
- C/C++LIBTIFF:需要从BW TIFF文件中读取白色和黑色像素的像素位置
- 使用OpenCV计算黑色像素
- 如果新图像中的原始像素为黑色,则Qt绘制一个蓝色像素
- 在opencvc++中设置彩色图像中的像素(i,j)为黑色
- 渲染到纹理,读取像素的结果大部分是黑色的
- 如何确定 OpenCV 中的像素是黑色还是白色
- 最右边的黑色像素