1

所以我有大约 160 张大小为 2048 像素 x 512 像素的图像。图像是灰色图像,我检查白色区域,区域周围的矩形被保存在列表中。我现在想将图像拼接在一起然后绘制矩形,我更新每个矩形的 y 位置,以便可以在正确的位置绘制它们。

缝合和更新 y 位置工作正常。拼接的图像约为 2048px x 80kpx。我检测到了 11 个白色区域,但即使在调试时应该绘制所有 11 个矩形,也只绘制了 3 个矩形。

前 3 个矩形位于前 30k y 轴像素中,其他矩形从 45k 像素开始。当我更改代码以便从图 60 开始时,前 3 个矩形当然没有被绘制,但其他 8 个被绘制。

你们中有人知道如何解决这个问题吗?

public void GenerateImageMap()
    {

        StichtedImageTemp = new Image<Bgr, byte>(ImgWidth, ImgHeight * (GrayImageMap.Count));
        for (int i = 0; i < GrayImageMap.Count; i++)
        {
            StichtedImageTemp.ROI = new System.Drawing.Rectangle(0, i * ImgHeight, ImgWidth, ImgHeight);
            GrayImageMap[i].Convert<Bgr,byte>().CopyTo(StichtedImageTemp);
            CvInvoke.cvResetImageROI(StichtedImageTemp);
        }

        StichtedImageTemp.Save("GrayImageMap.png");
    }

public void GenerateDefectMap(List<Rectangle> RectangleItems) {
        GenerateImageMap();
        foreach (var item in RectangleItems)
        {
            StichtedImageTemp.Draw(item.GetRectangle, new Bgr(Color.Aquamarine), 3);
        }
        StichtedImageTemp.Save("GrayDefectMap.png");
    }
4

1 回答 1

0

你没有提供足够的来源。例如,在 GenerateDefectMap 中调用 GenerateImageMap 有何影响,它不会传递或修改 RectangleItems,并且似乎只对 GrayImageMap 进行操作,这可能是全局的,谁知道呢。

就个人而言,我不会使用 System.Drawing 方法,否则您必须小心边缘处的插值等。我会手动转换(逐个像素),这在逻辑上比您选择的元组系统简单得多。无论如何,这是我的意见。

于 2016-04-28T22:24:57.143 回答