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

OpenCV QRコード Visual Studio

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

 

※参考サイト

 

関連記事

コメント

この記事へのコメントはありません。

カテゴリー

お問い合わせはコチラ!