質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.83%

  • C++

    3136questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • OpenCV

    929questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

  • Raspberry Pi

    672questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

  • Raspbian

    69questions

  • MinGW

    41questions

    MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

ラズパイ3bでOpencvを用いて顔認証を行う。

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 655

carnage0216

score 105

ラズパイ3bの環境

  • OS Raspbian64bit
  • ラズパイ用カメラモジュール
  • コンパイラ gcc(Mingw)
  • OpenCV 3.4.1(Mingw用にビルド済み)

<実行したいこと>
ラズパイ3bで顔認証を行いたいのですが、Mingwで既にビルドされたソースコードhttps://github.com/huihut/OpenCV-MinGW-Build/tree/OpenCV-3.4.1を使います。
ダウンロードしてみたところライブラリはなかったのですが、ラズパイのCPU(ARM)用にビルド前のソースコードをコンパイルしてラズパイのCPU用にライブラリを作れということでしょうか?

こちらがソースコードです。

#include "cv.h"
#include "highgui.h"

#define CONTROL_LED

#ifdef CONTROL_LED
#include <bcm2835.h>
#endif

// 未来カメラのメインプログラム

int calcBrightness(CvRect* rect,IplImage* frame);

int main() {
    int key;
    char str[32];
    int brightness;

#ifdef CONTROL_LED
    // BCM2835ライブラリの初期化
    if(!bcm2835_init()){
    printf("bcm2835_init failed\n");
    return(-1);
    }
    // P1端子11番ピンを出力、LOW設定にする
    bcm2835_gpio_fsel(RPI_V2_GPIO_P1_11,BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_write(RPI_V2_GPIO_P1_11,LOW);
#endif

    CvCapture *capture = 0;
    IplImage *frame = 0;

    CvHaarClassifierCascade* cvHCC = (CvHaarClassifierCascade*)cvLoad("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml");

    CvMemStorage* cvMStr = cvCreateMemStorage(0);

    CvSeq* face;

    CvFont font;

    // ウィンドウの作成とフルスクリーン表示設定
    cvNamedWindow ("capture_window", 0);
    cvSetWindowProperty("capture_window",CV_WND_PROP_FULLSCREEN,CV_WINDOW_FULLSCREEN);

    // フォント構造体の初期化
    cvInitFont(&font,CV_FONT_HERSHEY_PLAIN,1,1);

    // カメラからのビデオキャプチャを初期化
    capture = cvCreateCameraCapture (0);

    // 取得するカメラ画像の幅と高さを設定(カメラにより指定できる値が異なります)
    cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, (double)160);
    cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, (double)120);


    while (1) {

    // 1フレーム取り出す
    frame = cvQueryFrame (capture);

    // 画像中から検出対象の情報を取得
    face = cvHaarDetectObjects(frame, cvHCC, cvMStr);

#ifdef CONTROL_LED
    // 顔検出数がゼロならLED消灯、それ以外なら点灯の為にGPIOを制御する
    if(face->total == 0){
        bcm2835_gpio_write(RPI_V2_GPIO_P1_11,LOW);
    } else {
        bcm2835_gpio_write(RPI_V2_GPIO_P1_11,HIGH);
    }
#endif

    // 検出した個数分のループを回す
    for (int i = 0; i < face->total; i++) {

        CvRect* faceRect = (CvRect*)cvGetSeqElem(face, i);

        // 顔検出領域の輝度を取得
        brightness = calcBrightness(faceRect,frame);
        sprintf(str,"B:%d",brightness);
        // 顔の位置に矩形、その下に輝度情報をテキスト表示する
        cvRectangle(frame,
            cvPoint(faceRect->x, faceRect->y),
            cvPoint(faceRect->x + faceRect->width, faceRect->y + faceRect->height),
            CV_RGB(255, 255 ,0),
            2, CV_AA);
        cvPutText(frame,str,cvPoint(faceRect->x, faceRect->y + faceRect->height + 16),
              &font,CV_RGB(255,255,0));

        }

    cvShowImage ("capture_window", frame);


    key = cvWaitKey (1);
    if (key == ' ') {
        break;
    }

    // ダミーでフレームを取得(遅延量を少なく出来るように調整)
    cvQueryFrame (capture);
    cvQueryFrame (capture);
    cvQueryFrame (capture);
    cvQueryFrame (capture);
    }

    cvReleaseMemStorage(&cvMStr);
    cvReleaseCapture (&capture);
    cvDestroyWindow("capture_window");
    cvReleaseHaarClassifierCascade(&cvHCC);

    return 0;
}

// 指定した領域の輝度平均値を得る
int calcBrightness(CvRect* rect,IplImage* frame)
{
    int x;
    int y;
    unsigned char r,g,b,mono;
    unsigned long sum;

    sum = 0;
    // rectで指定された領域サイズでループを回す
    for(y=rect->y;y<(rect->y+rect->height);y++){
    for(x=rect->x;x<(rect->x+rect->width);x++){
        b = frame->imageData[frame->widthStep*y+x*3  ];
        g = frame->imageData[frame->widthStep*y+x*3+1];
        r = frame->imageData[frame->widthStep*y+x*3+2];
        // モノクロのデータを算出
        mono = (unsigned char)((float)r*0.30f + (float)g*0.59f + (float)b*0.11f);
        sum += mono;
    }
    }
    // 平均値を戻す
    return(sum / (rect->width*rect->height));
}

<疑問に思ったこと>
ラズパイでopencvのライブラリが得られたとして、なぜそのライブラリが正常に動くのでしょうか?
ビルドされる前のライブラリのソースコードがどのような出力をするかわからないと思います。その出力されたバイナリデータ(ライブラリ)がラズパイでコンパイルしただけで正常に動く実行ファイルが得られる理由がわかりません。
ラズパイの設計者がgccでopencvのライブラリを使う事を考慮して設計したため実行ファイルが正常に動くのでしょうか?

<編集>
今更ですが、この本を参考にしてラズパイでOpencvを使おうと考えていました。
http://www.kumikomi.net/interface/contents/201401.php
載せたソースコードはこの本のサポートページに載っていたものです。
どうやら#include <bcm2835.h>が関係しているようです。
ただ、このbcm2835がARMやライブラリにどのように働くかは中身を見てみないとわからないので調べてみます。

<編集2>
PCの方でもビルドしてみました。
PCの環境

  • Windows10 64bit
  • OPENCV3.2.0
  • VS2107
    実行ファイルが得られたのですが、実行すると停止してしまいます。
    必要なDLLはそろえたのですが実行は出来ませんでした。
    ラズパイでないので少しプログラムを編集しました。
    こちらがプログラムです。
    プログラム自体はラズパイでビルドする予定のものなのでうまくいかなかったのかもしれません。
    (ほかに原因があるように思えますが。)
#include <opencv/cv.h>
#include <opencv/highgui.h>

// 未来カメラのメインプログラム

int calcBrightness(CvRect* rect, IplImage* frame);

int main() {
    int key;
    char str[32];
    int brightness;



    CvCapture *capture = 0;
    IplImage *frame = 0;

    CvHaarClassifierCascade* cvHCC = (CvHaarClassifierCascade*)cvLoad("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml");

    CvMemStorage* cvMStr = cvCreateMemStorage(0);

    CvSeq* face;

    CvFont font;

    // ウィンドウの作成とフルスクリーン表示設定
    cvNamedWindow("capture_window", 0);
    cvSetWindowProperty("capture_window", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);

    // フォント構造体の初期化
    cvInitFont(&font, CV_FONT_HERSHEY_PLAIN, 1, 1);

    // カメラからのビデオキャプチャを初期化
    capture = cvCreateCameraCapture(0);

    // 取得するカメラ画像の幅と高さを設定(カメラにより指定できる値が異なります)
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, (double)160);
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, (double)120);


    while (1) {

        // 1フレーム取り出す
        frame = cvQueryFrame(capture);

        // 画像中から検出対象の情報を取得
        face = cvHaarDetectObjects(frame, cvHCC, cvMStr);


        // 検出した個数分のループを回す
        for (int i = 0; i < face->total; i++) {

            CvRect* faceRect = (CvRect*)cvGetSeqElem(face, i);

            // 顔検出領域の輝度を取得
            brightness = calcBrightness(faceRect, frame);
            sprintf(str, "B:%d", brightness);
            // 顔の位置に矩形、その下に輝度情報をテキスト表示する
            cvRectangle(frame,
                cvPoint(faceRect->x, faceRect->y),
                cvPoint(faceRect->x + faceRect->width, faceRect->y + faceRect->height),
                CV_RGB(255, 255, 0),
                2, CV_AA);
            cvPutText(frame, str, cvPoint(faceRect->x, faceRect->y + faceRect->height + 16),
                &font, CV_RGB(255, 255, 0));

        }

        cvShowImage("capture_window", frame);


        key = cvWaitKey(1);
        if (key == ' ') {
            break;
        }

        // ダミーでフレームを取得(遅延量を少なく出来るように調整)
        cvQueryFrame(capture);
        cvQueryFrame(capture);
        cvQueryFrame(capture);
        cvQueryFrame(capture);
    }

    cvReleaseMemStorage(&cvMStr);
    cvReleaseCapture(&capture);
    cvDestroyWindow("capture_window");
    cvReleaseHaarClassifierCascade(&cvHCC);

    return 0;
}

// 指定した領域の輝度平均値を得る
int calcBrightness(CvRect* rect, IplImage* frame)
{
    int x;
    int y;
    unsigned char r, g, b, mono;
    unsigned long sum;

    sum = 0;
    // rectで指定された領域サイズでループを回す
    for (y = rect->y; y<(rect->y + rect->height); y++) {
        for (x = rect->x; x<(rect->x + rect->width); x++) {
            b = frame->imageData[frame->widthStep*y + x * 3];
            g = frame->imageData[frame->widthStep*y + x * 3 + 1];
            r = frame->imageData[frame->widthStep*y + x * 3 + 2];
            // モノクロのデータを算出
            mono = (unsigned char)((float)r*0.30f + (float)g*0.59f + (float)b*0.11f);
            sum += mono;
        }
    }
    // 平均値を戻す
    return(sum / (rect->width*rect->height));
}

<編集3>
編集2で載せましたコードがなぜ正常に実行できないのかがわかりません。
depends.exeを利用して必要なDLLは揃えました。
基のソースコードがラズパイ用であるためでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2018/05/03 01:17

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 5

+6

carnage0216さん、

まずは、基本的なことから。

CPUの種類(命令セット)や、OS(お作法)の違いなどから、実行ファイルやライブラリ(dll, so, dylib)の形式が異なります。

たとえば、Windowsも、MacOSも、それぞれ同じIntel系CPUを使っていても、バイナリの形式が異なるので、相互に使用できません。また、linuxであっても、Intel系とARM系のプロセッサでは、CPUの命令コードが違うので、動きません。

細かいことを言うと、ARMであっても、いくつか種類があって、使用しているものにあったアーキテクチャを使わないといけません。
通常のRaspbianは、armhf というものです。

なので、github / huihut/OpenCV-MinGW-Build で配布されているのは、Windows(Intel)向けのライブラリ(DLL形式)であるので、ラズベリーパイでは動きません。

<疑問に思ったこと>
... その出力されたバイナリデータ(ライブラリ)が ...

とかかれてますが、ライブラリは、CPUの命令コードが入っているので、ただのデータではありません。
ライブラリも、CPUやOSの種類が大いに関係あり、使用環境に適したものを使用する必要があります。

ところで、

OS Raspbian64bit

とは、どのOSのことでしょうか?
https://www.raspberrypi.org/downloads/raspbian/ から、ダウンロードできる、Raspbianは、32bitのみだと思います。

標準のRaspbianデスクトップ環境(Debian Stretchベース)で、Raspbery Pi 3Bで、OpenCVを使用する方法ですが、
バージョンににこだわりがなければ、標準のレポジトリで、OpenCV 2.4系(libopencv-dev)がインストールできます。

3.4.1だと、自前でビルドするか、https://qiita.com/mt08/items/e8e8e728cf106ac83218 で記事を書いていますが、ビルド済みのものも使えます。
(簡単なテストしかしてないので、すべてのOpenCVの機能が動作するかわかりませんが、ラズパイのカメラで顔検出は動作しました。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+2

その出力されたバイナリデータ(ライブラリ)がラズパイでコンパイルしただけで正常に動く実行ファイルが得られる理由がわかりません。

それぞれが決められた規格に従って作られているからです。例えば、Linux(を含めたUnix系OS)では、POSIXという規格により、システムコールやライブラリー関数などが規定されています。そのため、POSIX準拠のプログラムを書き、POSIX準拠のコンパイラーでコンパイルすれば、POSIX準拠のOSで動かせるバイナリーが出力されます。

ラズパイの設計者がgccでopencvのライブラリを使う事を考慮して設計したため実行ファイルが正常に動くのでしょうか? 

違います。Raspberry Piの設計者はLinuxが動くように設計します。そして、OpenCV開発者はPOSIX準拠のソースコードを書きます。広く普及している規格に合わせることは、途轍もないメリットをもたらします。
用途(目的)によって、準拠すべき規格を変える必要性にも考慮し、上位モデルではWindowsにも対応しているのだと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/01 19:28

    どうもありがとうございます。
    今回参考にした本では、コンパイラはgccを使っていました。
    Linuxが動くように作ったり、OpenCV開発者の方がPOSIX準拠のソースコードを書いてくださったり、インストールしたgccが(ラズパイ3bへの搭載を考慮した)ARMに対応していたため正常に動く実行ファイルが得られると解釈したのですが、合っていますでしょうか?
    確認をお願いいたします。

    キャンセル

  • 2018/05/01 20:08

    認識としてはそんな感じで合ってます。厳密には、件のgccはおそらく特別Raspberry Pi 3向けにビルドされたわけではなく、ARM版Linux向けのコードを出力するためのオプションでビルドしていると思われます。

    キャンセル

  • 2018/05/01 20:19

    なるほど!
    gccに関してはARM版Linux向けのコードに合わせて周辺機器を取り付けているため、gccによってARM版Linuxから出力されたバイナリデータが正常に動くのですね。
    たしかに、osやコンパイラに合わせてハードを作った方が使いやすいですよね。

    キャンセル

  • 2018/05/01 21:03

    なぜ突然ハードウェアを持ち出すのか、意味が判りません。gccと周辺機器は何の関係もありません。私が回答に書いたことは、ソフトウェアに関する話です。Raspberry PiにLinuxを搭載することで、POSIX準拠のツールやソースコードが利用できるという話です。
    ハードウェアとしてはARMアーキテクチャー向けの規格(Windowsでいうところの標準機(PC/AT互換機)に相当する何か)があるとは思いますが、そちらの方面には詳しくないのでよく判りません。判らなくてもプログラムを書くには困りません。

    キャンセル

  • 2018/05/01 22:53

    話をややこしくしてしまいすいません。
    あの、今回のようなソフトウェアに関して勉強するには何を勉強すればいいでしょうか?
    組み込みOSやコンパイラなど勉強すればいいでしょうか。

    キャンセル

  • 2018/05/02 02:35

    > 今回のようなソフトウェアに関して勉強するには何を勉強すればいいでしょうか?

    なかなか難しい質問です。私自身「この知識を得るためにこうした」という明確なことはしておらず、長年の積み重ねで今に至るという感じなので、うまく説明できないのです。

    とりあえず、今の私のOSやプログラミングに関する知識の基本は、本や雑誌で得たものです。若い頃は毎月5,6冊読んでいた時期もありました(今ではすっかり読まなくなってしまいましたが……)。雑誌で幅広い知識を得て、興味深い事柄に関してより深く知るために専門書を買う、という感じでした。仕事でLinuxを使わざるを得なくなったときは、Linuxの本を何冊か買ってきて付録のインストールCDで自分のPCにLinuxをインストールし、いろいろ試しながら学んだものです。

    今ではネットで検索すれば何でも出てきますが、ある程度は知識がないと検索しようにもキーワードが思いつかないでしょうし、ネットの情報は玉石混淆ですから、そうと気づかずに石ころを拾ってしまうかもしれません。やはり、最初は体系的にまとめられている本で勉強するのが、結果的には一番近道なのではないかと考えます。

    > 組み込みOSやコンパイラなど勉強すればいいでしょうか。

    そんなものは後回しでも良いです。デスクトップ環境でかまわないので、開発ツールを使いこなして思い通りにアプリを作って動かせるようになれば、その辺のことも理解できるようになります。

    キャンセル

  • 2018/05/02 05:36

    貴重なご意見どうもありがとうございます。
    そうですよね。まずは自分で一からプログラムを作れるだけの量をこなして、ツールを使いこなし、作りたいものを作ったほうがいいように思えます。
    私はまだまだ勉強が足りないので。
    わかりました。どうもありがとうございました。

    キャンセル

  • 2018/05/02 11:03

    思い返してみると、体系的に学んだ一番最初は、情報処理系の試験のための勉強ですね。すでに廃止されましたが、当時はマイクロコンピュータ応用システム開発技術者試験というのもあって、それを取るための勉強は、ハード寄りの知識を得るのに大いに役に立ちました。現在はエンベデッドシステムスペシャリスト試験に置き換わっていて、難易度は高めだそうです。
    国家試験だけでなく民間試験もいろいろあるので、それらの勉強は、総合的・体系的に学ぶのにうってつけかもしれません。

    キャンセル

+2

Windowsでopencvのライブラリが得られたとして、なぜそのライブラリが正常に動くのでしょうか?
Linixでopencvのライブラリが得られたとして、なぜそのライブラリが正常に動くのでしょうか?

って疑問は浮かばないんですか?

ハードウェア等モロモロの差異を吸収するのがドライバなり低レイヤのお仕事です。
そいつらががんばってくれてます。

...あ、クロスコンパイルの話してます? 

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/01 06:29 編集

    解答ありがとうございます。
    >>Windowsでopencvのライブラリが得られたとして、なぜそのライブラリが正常に動くのでしょうか?
    >>Linixでopencvのライブラリが得られたとして、なぜそのライブラリが正常に動くのでしょうか?
    疑問は浮かびましたがgccコンパイラがインテルのCPU(やCPU周辺の周辺機器)に対応していると考えていたので質問しませんでした。

    なるほど、コンパイラだけでなくハードウェアやドライバや低レイヤがお仕事していたのですね。
    では、ラズパイ用のOSことラズビアンでopencvのライブラリが正常に動かすためにはラズパイのCPU(ARM)の構造やドライバなど理解する必要があるのですか?
    なんだか思っている以上に難しそうです。

    キャンセル

  • 2018/05/01 07:58

    使い方さえわかってれば構造なんか気tにしなくていい。
    てか気にしなくていいように低レイヤががんばってくれてる。

    キャンセル

  • 2018/05/01 08:02

    わかりました。
    やってみます。

    キャンセル

  • 2018/05/01 08:09

    Windows/LinuxでOpenCVほいほい使えるようになった?

    キャンセル

  • 2018/05/01 08:17

    Windowsでなら、opencvにおいて多少のエラーくらいは解決出来るようにはなりました。(エラーのほとんどは皆様に助けていただいてようやくそれなりに出来るようになりました。)

    Linuxはまだ難しいです。
    小型pcとラズパイに入れましたがvsのような開発環境がなくgccでopencvを使おうと過去に頑張り挫折してからWindowsのvsを使っています。
    今なら、gccを少しは使えるかもしれないので小型pcの方でopencvを試してみるのも良いかもしれません。
    最終目的は画像処理をCPUで並列処理できた後、いずれはCPUとGPUを合わせて使う事です。

    キャンセル

+2

やりたい事に対しての結論だけ述べると
以前にも何回か言ったように「CMakeつかって自分でライブラリをビルドしてください。」という事になります。

mingwはgccでwindows用実行ファイルを生成するためのプロジェクトです。

よって

コンパイラ gcc(Mingw)

で得られるのはWindows用の.exe/.dll/.lib/.oのみです。
windows上でコンパイルしたいのならばラズパイ用のgccを作るなり拾ってくるなりしなければいけません。

後半の疑問に思った事とやらは眠さと相まってうまく解読できませんが

Raspbian is a free operating system based on Debian optimized for the Raspberry Pi hardware.

なんだからDebianで動くように作られてるのならばRaspbian上で動く
(ようにRaspbianが頑張る)
ライブラリ側はDebianで動くように作る。
それだけ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/01 06:36 編集

    こうなったら、ラズパイのOSをWindows10にするしかないみたいですね。
    探してみるとWindows版のラズパイのOSもあるのでマイクロSDカードに焼いてきます。
    しかし、ラズパイのCPUはARMなので仮に実行ファイルが得られても正常に動作するかはやってみないとわからないです‥‥。

    キャンセル

  • 2018/05/01 06:43

    x86/x86_64のラズパイがあるならともかく、arm CPUであることが変えられない以上
    茨の道が、道ですらなくなることでしょう。
    ARMとintel x86では機械語に互換性が無いので無理です。

    キャンセル

  • 2018/05/01 15:27

    Windows 10 IoT Coreのことを言ってるのかな

    キャンセル

  • 2018/05/01 15:51

    そうです。

    キャンセル

+1

調べてみる限り、MingwのGCCでRaspberry Piのクロスコンパイルする方法は見つかりませんでした。OpenCVのソースコードをどうするか以前に、MingwではRaspberry Piで動く実行ファイルやライブラリを作成することができません。まずは、Raspberry Pi上で動く実行ファイルを作成できる環境を整え、Hello worldといった単純な実行ファイルを作成できることから始めてください。主な方法は3つです。

  • Raspberry Pi上でコンパイル
    コンパイル速度は遅いですが、一番簡単で一番確実です。
  • Debian Linux上のGCCでクロスコンパイル
    DebianのバージョンはRaspbianのバージョンに合わせた方がトラブルが少なくなるでしょう。Debian自体は仮想環境でも構いません。クロスコンパイルはある程度の知識が必要とするため、初心者にはお勧めできません。
  • Windows toolchain for Raspberry/PIを使ってコンパイル
    Windowsしかなく、仮想環境のLinuxすら用意できない時の手段です。Visual Studio上で開発もできる優れもののようです。詳しい使い方はリンク先の下にあるTutorialのリンクを辿ってください。

なお、Raspberry PiにOpenCVをインストールしたという例をいくつか見つけましたが、すべてRaspberry Pi上でコンパイルする方法でした。クロスコンパイルやWindows toolchainを使った成功例はないため、できるかどうかすらわからず、チャレンジするとしても、相当高度な知識が無いと難しいでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    OpenCVで動画の読み込みがうまくできません。

    以前別のプログラムで動画の読み込みができましたが、今現在取り組んでいるプログラムではうまくいきません。 言語はC++でopencv2.4.9を使用しています。 Os windo

  • 受付中

    OpenCVで動画の読み込みがうまくできません。

    以前別のプログラムで動画の読み込みができましたが、今現在取り組んでいるプログラムではうまくいきません。   言語はC++を使用しています。  ・ソースコード  ヘッダファ

  • 解決済

    OpenCVでの顔、鼻検出の精度を高めたいです

    お世話になってます。 現在大学3年生で最近プログラミングの勉強を始めた者です。 顔と鼻検出をしてそれを描画するプログラムを書いているところですが、 顔の中にない鼻は描画しない

  • 解決済

    カメラ画像の一時停止 再開

    OpenCVでカメラ画像を取得させたものに、キーのボタンを押したときに一時停止となり、その画像を画像処理し、また違うキーのボタンを押したときに画像取得が始まるようにすることは可能で

  • 解決済

    opencv 動画 再生

    #include <stdio.h> #include <cv.h> #include <highgui.h> int main(int argc, char* argv[])

  • 解決済

    OpenCvSharp3で重心を求めたいです

    以下のように、ラベリングを実行するプログラムはできたのですが、ここから重心の座標や面積を求めるプログラムを作成したいです。どなたか、教えていただけますか? 最終的な目標としては

  • 受付中

    カメラで青い円を検出

    #include <stdio.h> #include <stdlib.h> #include <highgui.h> #include <cv.h> #include <cxco

  • 解決済

    OpenCVを用いた物体検出

    現在OpenCV2.1を用いた上で顔検出にチャレンジしています。 学習等については問題なく行うことができ、顔の検出を行おうと思っているのですが、検出の段階で設定するパラメータの"m

同じタグがついた質問を見る

  • C++

    3136questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • OpenCV

    929questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

  • Raspberry Pi

    672questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

  • Raspbian

    69questions

  • MinGW

    41questions

    MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。