반응형

 

 

지금까지 바코드의 값을 읽는 것까지 되었다.

이제는 이미지에서 바코드가 있는 위치를 얻어서 표시를 하고 싶어졌다.

그래서 바코드의 위치를 찾는 방법을 알아보았다.

 

아래에 그 예제 코드를 추가하였다.

result.ResultPoints의 값을 이용해 barcode의 위치를 얻을 수 있다.

[0].X, [0].Y : Top left

[2].X, [2].Y : Bottom right

 

이 위치를 이용하여 Rectangle로 이미지에 위치를 표시하였다.

 

그리고 pictureBoxIplImage의 Image를 update 하여 화면에 표시하였다.

 

using OpenCvSharp;
using ZXing;

private void btnBarcode_Click(object sender, EventArgs e)
{
  src = Cv2.ImRead("c:\\tmp\\inkscape.png", ImreadModes.Color);
  pictureBoxIplImage.ImageIpl = src;
  BarcodeReader reader = new BarcodeReader();
  Result result = reader.Decode((Bitmap)pictureBoxIplImage.Image);
  if (result != null)
  {
    decoded = "Decode : " + result.ToString() + "\r\nType : " + result.BarcodeFormat.ToString();

    // Get Barcode position 
    decoded += "\r\n" + (int)result.ResultPoints[0].X + ", " + (int)result.ResultPoints[0].Y;
    decoded += "\r\n" + (int)result.ResultPoints[2].X + ", " + (int)result.ResultPoints[2].Y;

    // Barcode position display
    Cv2.Rectangle(src, new Rect((int)(result.ResultPoints[0].X), (int)(result.ResultPoints[0].Y),
      (int)(result.ResultPoints[2].X - result.ResultPoints[0].X), (int)(result.ResultPoints[2].Y - result.ResultPoints[0].Y)),
      Scalar.Blue, 10, LineTypes.Link4);

    // PictureBoxIpl update
    pictureBoxIplImage.ImageIpl = src;
    
    if (decoded != "")
    { 
      textBoxResult.Text = decoded;
    } 
  } 
}

 

 

아래와 같이 파란색으로 바코드의 위치를 표시하게 된다.

 

 

 

 

 

 

728x90
반응형

'공부 > C#' 카테고리의 다른 글

210307 C# 커서위치 제어 프로그램  (0) 2021.03.07
210212 OpenCV C# PictureBoxIpl SizeMode  (0) 2021.02.12
210202 C# Barcode reader project (1)  (0) 2021.02.10
210202 OpenCV PictureBoxlpl  (0) 2021.02.09
210128 Pdf2Image winform project (4)  (0) 2021.02.07

+ Recent posts