menu
  1. HOME
  2. News & Blog
  3. OpenCV
  4. Visual Studio 2015でlibdecodeqrを利用してQRコードを読み取る

News & Blogニュース&ブログ

Visual Studio 2015でlibdecodeqrを利用してQRコードを読み取る

Visual Studio 2015開発環境で、OpenCVとlibdecodeqrを利用して、ウェブカメラから撮影したイメージからQRコードを読み取る簡単なアプリケーションを作成してみました。 Visual Studio 2015開発環境でOpenCVを動かす環境は既に構築されている前提条件とします。 まだ上記の環境になっていない場合は、以下のリンク先を参考して環境を構築しましょ~! 開発環境は以下となります。
  • OS:Windows 10 64bit
  • 開発ツール:Visual Studio 2015 Community
  • 言語:C++
作業流れとしては以下となります。
  1. libdecodeqrをダウンロード
  2. libdecodeqrのライブラリを作成
  3. Windows 環境変数設定
  4. Visual Studio 2015 設定
  5. テストアプリケーション作成
 

libdecodeqrをダウンロード

GitHubからlibdecodeqrをダウンロードします。 libdecoderqr_01_download ダウンロードしたファイルを解凍して、テストアプリケーションが参考するライブラリの場所に配置しましょ~!筆者は「C:\dev\lib\libdecodeqr」に配置しました。 「C:\dev\lib\libdecodeqr-master\libdecodeqr\libdecodeqr.dsw」をVisual Studio 2015で開きます。 libdecoderqr_02_download libdecoderqr_03_download libdecoderqr_04_download libdecoderqr_05_download Visual Studio 2015でlibdecodeqr.dswを開いたら以下の画面がウェブブラウザに表示されますが、無視しましょ~! libdecoderqr_06_download  

libdecodeqrのライブラリを作成

libdecodeqrのプロジェクトが開けましたら、プラットフォームをx64に設定しましょ~! 「ビルド>構成マネージャー」で設定ができます。 libdecoderqr_07_build libdecoderqr_08_build libdecoderqr_09_build libdecodeqrをビルドする時は、OpenCVのライブラリを利用しますので、OpenCVのライブラリを読み込める環境設定をおこないましょ~! OpenCVの「includeフォルダ」を指定するために、ソリューションエクスプローラーのプロジェクト名でマウスを右クリックして、メニューを表示させます。メニューから「プロパティ」を選択してプロジェクトのプロパティページを開きます。プロジェクトのプロパティページの左側のツリーで「構成プロパティ>C/C++>全般」を選択します。右側の設定画面に「追加のインクルドディレクトリ」が見えますね?そこに「C:\dev\lib\opencv-2.4.11\build\include;C:\dev\lib\opencv-2.4.11\build\include\opencv」を設定します。 libdecoderqr_10_build libdecoderqr_11_build 次は、ビルドモードに「Release」を選択します。 libdecoderqr_12_build これで、ビルドの準備ができました。ビルドをしましょ~! libdecoderqr_13_build 以下のようにビルドが成功しました。ライブラリファイルができたか確認しましょ~!生成場所は「C:\dev\lib\libdecodeqr-master\libdecodeqr\Release」です。 libdecoderqr_14_build ライブラリファイルも生成されていますね。 libdecoderqr_15_build    

Windows 環境変数設定

ライブラリ作成が終わったら、Windowsの環境変数のpathに作成したライブラリを登録しましょ~! libdecoderqr_16_setting libdecoderqr_17_setting  

Visual Studio 2015 設定

次はVisual Studio 2015の設定です。テストアプリケーションのプロジェクトがOpenCVとlibdecodeqrを認識できるように「includeフォルダ」と「ライブラリフォルダ」を設定します。 まず、「ファイル>新規作成>プロジェクト」をクリックして、Win32コンソールアプリケーションの新規プロジェクトを作成しましょ~! libdecoderqr_18_setting libdecoderqr_19_setting libdecoderqr_20_setting libdecoderqr_21_setting プロジェクトが生成されたら、x64用アプリケーションを作成するように構成を変更しましょ~!「ビルド>構成マネージャー」をクリックして、アクティブソリューションプラットフォームを「x86」から「x64」に変更します。 libdecoderqr_22_setting これからOpenCVとlibdecodeqrの「includeフォルダ」を指定します。 ソリューションエクスプローラーのプロジェクト名でマウスを右クリックして、メニューを表示させます。メニューから「プロパティ」を選択してプロジェクトのプロパティページを開きます。プロジェクトのプロパティページの左側のツリーで「構成プロパティ>C/C++>全般」を選択します。右側の設定画面に「追加のインクルドディレクトリ」が見えますね?そこに「C:\dev\lib\opencv-2.4.11\build\include;C:\dev\lib\opencv-2.4.11\build\include\opencv;C:\dev\lib\libdecodeqr-master\libdecodeqr」を設定します。 libdecoderqr_23_setting 次は、「ライブラリフォルダ」を指定します。 プロジェクトのプロパティページの左側のツリーで「構成プロパティ>リンカ―>全般」を選択します。右側の設定画面に「追加のライブラリディレクトリ」が見えますね?そこに「C:\dev\lib\opencv-2.4.11\build\x64\vc12\lib;C:\dev\lib\libdecodeqr-master\libdecodeqr\Release」を設定します。 libdecoderqr_24_setting これで、コーディングの準備が終わりました。  

テストアプリケーション作成

以下のようにソースコードを作成しましょ~!
// libdecodeqr_test.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
 
#define _CRT_SECURE_NO_WARNINGS // fopenのエラー(C4996)対応
 
#pragma warning(disable : 4819) // 余計な警告が出るのでとりあえず黙らせる
 
#include "stdafx.h"
#include <iostream>
#include <windows.h>
 
// OpenCVを使用するため
#include <opencv2/opencv.hpp> // インクルードファイル指定
#include <opencv2/opencv_lib.hpp> // 静的リンクライブラリの指定
#include <cv.h>
#include <highgui.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
 
// QRコードをデコードをでコードするため
#include "decodeqr.h"
 
// OpenCVを使用するため
//#pragma comment( lib, "cv.lib" )
//#pragma comment( lib, "cxcore.lib" )
//#pragma comment( lib, "cvaux.lib" )
//#pragma comment( lib, "highgui.lib" )
 
// QRコードをデコードをでコードするため
#pragma comment(lib, "WS2_32.LIB")
#pragma comment(lib, "libdecodeqr.lib")
 
using namespace cv; // 名前空間の指定
 
int main()
{
 CvCapture *m_pCap = 0;
 IplImage *m_pImg = 0;
 IplImage *qrimg = 0;
 
 char m_cName[16];
 ::sprintf_s(m_cName, 16, "QRcode");
 
 int c;
 
 // カメラキャプチャの作成(引数はカメラデバイスの番号)
 m_pCap = cvCreateCameraCapture('1');
 
 // カメラを表示するウインドウの作成
 cvNamedWindow(m_cName, CV_WINDOW_AUTOSIZE);
 
 while (1) {
 // 指定したカメラのフレーム画像を取得
 m_pImg = cvQueryFrame(m_pCap);
 
 // 指定したウインドウ内に画像を表示
 cvShowImage(m_cName, m_pImg);
 
 ::Sleep(100);
 
 // ESCキーで脱出
 c = cvWaitKey(2);
 if (c == '\x1b') {
 break;
 }
 // SpaceキーでQRcode解析開始
 else if (c == '\x20') {
 QrDecoderHandle decoder = qr_decoder_open();
 
 // QRコードのデコード処理
 qr_decoder_set_image_buffer(decoder, m_pImg);
 
 if (!qr_decoder_is_busy(decoder)) {
 int adaptive_th_size = 25;
 int adaptive_th_delta = 10;
 short stat = qr_decoder_decode(decoder, adaptive_th_size, adaptive_th_delta);
 
 for (adaptive_th_size = 25, stat = 0; (adaptive_th_size >= 3) && ((stat & QR_IMAGEREADER_DECODED) == 0); adaptive_th_size -= 2) {
 stat = qr_decoder_decode(decoder, adaptive_th_size, adaptive_th_delta);
 }
 }
 
 // QRコードの本文を取得
 int text_size = 0;
 unsigned char* text = new unsigned char[text_size];
 
 QrCodeHeader header;
 if (qr_decoder_get_header(decoder, &header)) {
 if (text_size < header.byte_size + 1) {
 if (text) {
 delete[] text;
 }
 text_size = header.byte_size + 1;
 text = new unsigned char[text_size];
 }
 qr_decoder_get_body(decoder, text, text_size);
 }
 std::cout << "Decoded Text = \"" << text << "\"\n";
 delete[] text;
 
 CvBox2D *boxes = qr_decoder_get_finderpattern_boxes(decoder);
 CvPoint *vertexes = qr_decoder_get_coderegion_vertexes(decoder);
 
 // 終了
 qr_decoder_close(decoder);
 }
 }
 
 // 開放
 cvReleaseCapture(&m_pCap);
 cvDestroyWindow(m_cName);
 
 return EXIT_SUCCESS;
}


コーディングが終わったら「Ctrl+F5」を押下し、作成したアプリケーションを実行してみましょ~! libdecoderqr_25_coding もし、以下のようなエラーメッセージが出力されたら、プロジェクトのプロパティページの左側のツリーで「構成プロパティ>C/C++>全般」を選択します。右側の設定画面の「SDLチェック」を「いいえ(/sdl-)」に設定します。 libdecoderqr_26_coding

↓↓↓

libdecoderqr_27_coding 再度「Ctrl+F5」を押下し、作成したアプリケーションを実行してみましょ~! もし、以下のようなエラーメッセージが出力されたら、プロジェクトのプロパティページの左側のツリーで「構成プロパティ>C/C++>コード生成」を選択します。右側の設定画面の「ランタイムライブラリ」を「マルチスレッド(/MT)」に設定します。ビルドモードにも「Release」を選択します。 libdecoderqr_28_coding

↓↓↓

libdecoderqr_29_coding libdecoderqr_30_coding 再度「Ctrl+F5」を押下し、作成したアプリケーションを実行してみましょ~!以下の画面が表示されたら成功です! アプリケーションを起動すると、ウェブカメラが動作します。QRコードを表示させて、スペースバーを押下するとQRコードを読みます。制度はまだ低そうですね。ESCキーを押下するとアプリケーションを終了します。 libdecoderqr_31_coding   ※テストアプリケーションを作成する際に以下のエラーメッセージが出力されたら、「Visual Studio 2013のVisual C++ 再配布可能パッケージ」をインストールして下さい。 52_use

↓↓↓

https://www.microsoft.com/ja-jp/download/details.aspx?id=40784

53_use 54_use   ※参考サイト  

お気軽にご相談ください

株式会社アルベではIT、Webを使って皆様の課題解決のお手伝いをしています。
下記のようなお悩みを持つ方は、是非お気軽にご相談ください。

お問い合わせ