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

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

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

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

I = imread(&quotQRCode_eyc.ac.ir.jpg&quot);

در مرحله بعد بررسی تصویر ورودی جهت یافتن QR Code انجام میشود. خروجي دستور زير شامل پارامترهاي محتوای QRCodeرمز گشایی شده، قالب آن که شامل يكي از موارد جدول زیر است و مختصات قرارگیری تصویر QRCodeدر تصویر اصلی مي باشد.

[msg,detectedFormat,loc] = readBarcode(I,&quotall&quot);
قالب های بارکدهای 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

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

xyText = loc(2,:); xyText = xyText + 10;

با این دستور، با توجه به اینکه متغیر locدارای 4 نقطه مختصات جهت تشخیص QRCode است، طبق تصویر Workspace مقدار متغیر loc به شرح تصوير زير است، لذا با دستور بالا فقط مختصات دوم بدون محدودیت {یعنی نقطه ابتدایی و انتهایی مختصات} در متغیر xyText مقداردهی میگردد و جهت جلوگيري از تداخل آن با نقطه تصوير اصلي، مقدار 10 واحد به مختصات آن نقطه اضافه ميگردد.

مقادیر نقطه های  شناسایی شده در QRCode
مقادیر نقطه های شناسایی شده در QRCode

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

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

Imsg = insertText(I,xyText,msg,&quotBoxOpacity&quot,1,&quotFontSize&quot,10);

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

دستکاری تصویر اصلی و اضافه کردن مقدار استخراج شده از QRCode به آن
دستکاری تصویر اصلی و اضافه کردن مقدار استخراج شده از QRCode به آن

اکنون جهت ایجاد دایره های قرمز تو پر روی نقاط شناسایی QRCode روی تصویر جدید Imsg از دستور زیر استفاده میشود.

Imsg = insertShape(Imsg, &quotFilledCircle&quot,[loc, repmat(5, length(loc), 1)],&quotColor&quot,&quotred&quot,&quotOpacity&quot,1);

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

imshow(Imsg);

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

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

close all; clear all; clc; I = imread(&quotQRCode_eyc.ac.ir.jpg&quot); [msg,detectedFormat,loc] = readBarcode(I,&quotall&quot); disp(&quotQRCode format: &quot + detectedFormat); disp(&quotDecoded QRCode message: : &quot + msg); xyText = loc(2,:); xyText = xyText + 10; Imsg = insertText(I,xyText,msg,&quotBoxOpacity&quot,1,&quotFontSize&quot,10); Imsg = insertShape(Imsg, &quotFilledCircle&quot,[loc, repmat(5, length(loc), 1)],&quotColor&quot,&quotred&quot,&quotOpacity&quot,1); imshow(Imsg);

Reference:

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

qr codeتصویرمتلب
شاید از این پست‌ها خوشتان بیاید