지금까지 바코드의 값을 읽는 것까지 되었다.
이제는 이미지에서 바코드가 있는 위치를 얻어서 표시를 하고 싶어졌다.
그래서 바코드의 위치를 찾는 방법을 알아보았다.
아래에 그 예제 코드를 추가하였다.
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;
}
}
}
아래와 같이 파란색으로 바코드의 위치를 표시하게 된다.
'공부 > 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 |