*

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

 

※参考サイト

 

お問い合わせはこちら!

関連記事

vs2015c

Windows 10にVisual Studio 2015をインストール

Windows 10 64bit にVisual Studio 2015 Communityをインス

記事を読む

vs2015xOpenCV

Visual Studio 2015でOpenCVを動かすための環境設定

OpenCVを利用してウェブカメラから画像を取得し、画面上に表示してみました。 コーディング環

記事を読む

お問い合わせはこちら!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

お問い合わせはこちら!

35643
SourceTreeで差分ファイルを抽出

GitのクライアントでSourceTreeを利用する時、コミットの差分

2536_normal_1392167345_phpstudy
第104回 PHP勉強会に参加しました!

昨日「第104回 PHP勉強会@東京」に参加し、メイン発表をしました。

laravel_dev
Windows10にLaravel開発環境を構築

本記事は筆者のノートパソコンにLaravelプロジェクトの開発環境を構

1463577479_XAMPP
複数のXAMPPインストール

Windows環境でPHP開発をする際にXAMPPをインストールするこ

Laravel
Laravel 5.1 プロジェクト作成(インストール)

本記事ではLaravel 5.1 LTSを利用して開発するためにLar

→もっと見る

  • AWS構築 - クラウドアドバイザー
PAGE TOP ↑