C#并非所有矩形都是在Image中绘制的,高度约为70k px

时间:2016-04-28 20:49:48

标签: c# image list draw drawrectangle

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

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

前3个矩形位于前30k y轴px中,其他3个矩形起始于45k px。当我更改代码以便从图片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");
    }

1 个答案:

答案 0 :(得分:0)

你没有提供足够的资料。例如,如何在GenerateDefectMap中调用GenerateImageMap影响任何东西,它不会传递或修改RectangleItems,而且似乎只对GrayImageMap进行操作,而GrayImageMap可能是全局的,或者知道的东西。

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