C# 如何将点列表从图片分割为连续块
我有三百张照片。所有这些都是围绕一个对象制作的,但都是手动完成的,因此需要进行调整。一个物体应该在同一个位置,因为我要从这些照片制作timelapse视频。这个物体应该在同一个地方。照片之间的偏移量可能高达300-500px,所以太大了。我在那个主要物体上发现了一个红色标志,它存在于每张照片上,所以这是我的出发点 因此,我实现了小型.Net应用程序:C# 如何将点列表从图片分割为连续块,c#,.net,image-processing,system.drawing,C#,.net,Image Processing,System.drawing,我有三百张照片。所有这些都是围绕一个对象制作的,但都是手动完成的,因此需要进行调整。一个物体应该在同一个位置,因为我要从这些照片制作timelapse视频。这个物体应该在同一个地方。照片之间的偏移量可能高达300-500px,所以太大了。我在那个主要物体上发现了一个红色标志,它存在于每张照片上,所以这是我的出发点 因此,我实现了小型.Net应用程序: 加载每个图像 扫描照片主区域中的像素 对于每个像素,它尝试将当前像素与所需像素进行比较。需要 像素保存为HSL编号。所有的照片都有点不同 亮度,所
列表
但我有一个问题-因为不同的亮度和较大的颜色范围,在一些照片上,它发现一些像素也满足所需的颜色范围。如果它们位于符号上方,则保存的增量不正确
我怎样才能忽略这些假警报
我目前的想法是用一些增量按位置分组像素。因此,附近的一组像素将被分组为一个块
为此采取的步骤:
点的列表。其中一些可能是虚警像素
Dictionary<Rectangle, List<Point>> blocks = new Dictionary<Rectangle, List<Point>>();
const int blockDelta = 50; // pixels delta
foreach (var point in points
{
bool added = false;
foreach (var rectangle in blocks.Keys)
{
if (point.X >= rectangle.Left && point.X <= rectangle.Right &&
point.Y >= rectangle.Top && point.Y <= rectangle.Bottom)
{
blocks[rectangle].Add(point);
added = true;
break;
}
}
if (added)
continue;
Rectangle newRect = new Rectangle(point.X - blockDelta,
point.Y - blockDelta, blockDelta*2, blockDelta*2);
blocks.Add(newRect, new List<Point>());
blocks[newRect].Add(point);
}
Dictionary blocks=newdictionary();
常数int blockDelta=50;//像素增量
foreach(变量点到点)
{
bool added=false;
foreach(块中的变量矩形。键)
{
如果(point.X>=rectangle.Left&&point.X=rectangle.Top&&point.Y1.虚警像素是亮像素还是暗像素,与红色像素相差很大,因此我建议改用rgb
2.使用阈值选择“想要的”像素后,您可以尝试放大以恢复丢失的“想要的”像素,因为每个图像中只有四颗大星星,因此您可以根据其包含的像素数选择前四个像素组
Hi Sergey,有一次我在从事一个涉及图像处理的项目时,遇到的问题是在场地上找到一个红色球。该实现基于BFS算法。目标是找到一组相邻的“红色”像素,像素数最少。在该项目中效果很好。我的建议是使用相同的方法,找到每个像素组的中心作为校准点。图像的亮度和所需颜色变化很大。例如,最亮的像素组的HSL为355、79、66,最暗的像素组的HSL为346、85、24,这就是为什么会出现假警报。我会尝试使用放大,谢谢。