如何将 ROI 边界矩形与主图像坐标对齐

How to align ROI bounding rectangle to main image coordinate

我正在从图像中解码 QR 码,因为图像很大并且有其他不需要的图形,所以我在代码周围绘制 roi 并对其进行解码。一切正常,但是当我尝试在 QR 码周围绘制边界框时,它被绘制在其他地方。如何将矩形与主图对齐?

这就是我得到的 - 红色矩形是 roi,绿色矩形是边界框。

代码如下:

     Image<Gray, byte> Gray_Image = My_Image.Convert<Gray, byte>();
    Gray_Image.ROI = Coderect;
         Gray_Image._Not();

        CvInvoke.cvThreshold(Gray_Image,Gray_Image,50,255.0,Emgu.CV.CvEnum.THRESH.CV_THRESH_BINARY);

        Gray_Image.Dilate(5);

        

        StructuringElementEx element = new StructuringElementEx(3, 3, 1, 1, Emgu.CV.CvEnum.CV_ELEMENT_SHAPE.CV_SHAPE_RECT);
        CvInvoke.cvMorphologyEx(Gray_Image, Gray_Image, IntPtr.Zero, element, Emgu.CV.CvEnum.CV_MORPH_OP.CV_MOP_CLOSE, 18);

        var contour = Gray_Image.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_EXTERNAL);
      

        CvInvoke.cvRectangle(My_Image, new Point(contour.BoundingRectangle.X, contour.BoundingRectangle.Y), new Point(contour.BoundingRectangle.X + contour.BoundingRectangle.Width, contour.BoundingRectangle.Y + contour.BoundingRectangle.Height), new MCvScalar(0, 255, 0), 4, Emgu.CV.CvEnum.LINE_TYPE.EIGHT_CONNECTED, 0);
    


        pictureBox1.Image = My_Image.Bitmap;

我找到了解决方案。 因为我知道 roi 的 (roiX,roiY) 并且我也知道边界框的 (bbX,bbY,bbW,bbH)。 通过添加 roi 的 X 和边界框的 X,我得到了位置的 X,对于 Y 也是如此。

我只需要执行以下操作:

    cvInvoke.cvRectangle(My_Image, new Point(roiX+bbX, roiY+bbY), new Point((roiX+bbX)+bbW,(roiY+bbY)+bbH), new McvScalar(0,255,0), Line_Type.Eight_Connected,0);