عباس خدائیان
عباس خدائیان
خواندن ۲ دقیقه·۲ سال پیش

خواندن آفلاین بارکد در متلب

منظور از خواندن آفلاین این است که بدون استفاده از وب کم و تصویر لایو دوربین یا ویدیو استریم و فقط با استفاده از تصویر یک بارکد چطور محتوای بارکد را استخراج نمائیم.

بارکد دو بعدی
بارکد دو بعدی

به این منظور باید در ابتدا تصویر بارکد مورد نظر از ورودی در متلب خوانده شود. لذا دستور زیر را اجرا میکنیم:

I = imread('BarCode.jpg');

در مرحله بعد بررسی تصویر ورودی جهت یافتن بارکد یک بعدی انجام میشود که محتوای بارکد رمز گشایی شده، قالب بارکد موجود در تصویر که شامل جدول زیر است و مختصات قرارگیری تصویر بارکد در تصویر اصلی بازیابی توسط دستور زیر بازیابی می شود.

[msg,detectedFormat,loc] = readBarcode(I,'1D');
قالب های جهانی شناخته شده برای بارکدهای 1 بعدی و 2 بعدی
قالب های جهانی شناخته شده برای بارکدهای 1 بعدی و 2 بعدی

در صورت اجرای این دستور متغییر های msg، detectedFormat و loc شامل مقادیر بازیابی شده از تصویر بارکد خواهد بود.

در این مثال، هر یک از این متغییر ها شامل مقادیر زیر هستند که در بخش Workspace قابل مشاهده است.

تصویر Workspace در نرم افزار متلب
تصویر Workspace در نرم افزار متلب

از طرفی جهت نمایش راحت تر این متغییر ها در بخش Command Window میتوانید از دستورات زیر استفاده کنید:

disp(&quotBarcode format: &quot + detectedFormat); disp(&quotDecoded barcode message: : &quot + msg);

در این صورت به شرح ذیل در بخش Command Window نمایش داده میشود:

تصویر Command Window در نرم افزار متلب
تصویر Command Window در نرم افزار متلب

در انتها جهت زیباتر اضافه کردن این مقادیر به تصویر و نمایش همه آنها با هم در یک تصویر به شرح ذیل عمل میکنیم:

xyBegin = loc(1,:);

با این دستور، با توجه به اینکه متغیر loc دارای دو نقطه مختصات طبق تصویر Workspace به شرح [29,104;216,104] است، لذا فقط مختصات اول بدون محدودیت {یعنی نقطه ابتدایی و انتهایی مختصات} در متغیر xyBegin مقداردهی میگردد.

سپس توسط دستور زیر مقدار msg را در نقطه مشخص xyBegin روی تصویر I درج میکنیم.

دقت شود در این حالت سایز متن روی 15 پیکسل تنظیم شده است و یک مستطیل پر دور متن ایجاد شده است.

Imsg = insertText(I,xyBegin,msg,'BoxOpacity',1,'FontSize',15);

تا اینجا خروجی کار به شرح تصویر زیر خواهد بود:

تصویر دستکاری شده بارکد
تصویر دستکاری شده بارکد

جهت بازیابی سایز تصویر از دستور زیر استفاده میشود:

imSize = size(Imsg);

جهت ایجاد یک خط با پهنای 5 پیکسل روی تصویر جدید Imsg از دستور زیر استفاده میشود.

Imsg = insertShape(Imsg,'Line',[1 xyBegin(2) imSize(2) xyBegin(2)],'LineWidth',5);

در نهایت با استفاده از دستور زیر تصویر کامل نمایش داده میشود:

imshow(Imsg);

خروجی نهایی کار به شرح ذیل خواهد بود:

تصویر نهایی بارکد
تصویر نهایی بارکد



اسکریپت این مقاله به شرح ذیل است:

close all; clear all; clc; I = imread('BarCode.jpg'); [msg,detectedFormat,loc] = readBarcode(I,'1D'); disp(&quotBarcode format: &quot + detectedFormat); disp(&quotDecoded barcode message: : &quot + msg); xyBegin = loc(1,:); Imsg = insertText(I,xyBegin,msg,'BoxOpacity',1,'FontSize',15); imSize = size(Imsg); Imsg = insertShape(Imsg,'Line',[1 xyBegin(2) imSize(2) xyBegin(2)],'LineWidth',5); imshow(Imsg);

Reference:

[1] https://www.mathworks.com/help/vision/ref/readbarcode.html

متلببارکدنرم افزار
شاید از این پست‌ها خوشتان بیاید