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

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

ただいまの
回答率

90.62%

  • C

    3561questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    3328questions

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

  • OpenCV

    1017questions

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

ヘッダファイルなしでコンパイルしたい。

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 890

carnage0216

score 120

環境
Windows10 64bit
vs2015(開発用コマンドプロンプトのみ)
OpenCV-MinGW-Buildhttps

このサイトhttp://d.hatena.ne.jp/Inuneco/20110714/p1に書いてあるopencvのプログラムをヘッダファイルなしで書き直したいのですが、どのようにすればよいでしょうか?

#include <cv.h>
#include <highgui.h>
int main () {
cvNamedWindow ("test", CV_WINDOW_AUTOSIZE);
cvWaitKey (0);
cvDestroyWindow ("test");
return 0;
}

私個人で書いたものはこちらです。
できる限りopencvの参考書とc言語の参考書で頑張ったのですが最後のエラーが解決できずにいます。

#define cvNamedWindow;
int cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );
CV_WINDOW_AUTOSIZE     = 0x00000001;//the user cannot resize the window, the size is constrainted by the image displayed
int main () {
cvNamedWindow ("test", CV_WINDOW_AUTOSIZE);
cvWaitKey (0);
cvDestroyWindow ("test");
return 0;
}


エラーがこちらです。

C:\Users\Daito\Desktop\NamedWindow.c:3:22: warning: ISO C99 requires whitespace after the macro name
 #define cvNamedWindow;
                      ^
C:\Users\Daito\Desktop\NamedWindow.c:4:1: warning: useless type name in empty declaration
 int cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );
 ^~~
C:\Users\Daito\Desktop\NamedWindow.c:4:20: error: expected identifier or '(' before 'const'
 int cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) );
                    ^~~~~
C:\Users\Daito\Desktop\NamedWindow.c:5:1: warning: data definition has no type or storage class
 CV_WINDOW_AUTOSIZE     = x00000001;//the user cannot resize the window, the size is constrainted by the image displayed
 ^~~~~~~~~~~~~~~~~~
C:\Users\Daito\Desktop\NamedWindow.c:5:1: warning: type defaults to 'int' in declaration of 'CV_WINDOW_AUTOSIZE' [-Wimplicit-int]
C:\Users\Daito\Desktop\NamedWindow.c: In function 'main':
C:\Users\Daito\Desktop\NamedWindow.c:11:1: warning: implicit declaration of function 'cvWaitKey' [-Wimplicit-function-declaration]
 cvWaitKey (0);
 ^~~~~~~~~
C:\Users\Daito\Desktop\NamedWindow.c:13:1: warning: implicit declaration of function 'cvDestroyWindow' [-Wimplicit-function-declaration]
 cvDestroyWindow ("test");
 ^~~~~~~~~~~~~~~


どうかよろしくお願いいたします。

ヘッダファイルなしのプログラムにこだわるのはヘッダファイル 自体に無駄が多いため、ソースコードとは関係ないものでエラーを出すためです。cc~~~~

出来れば解決までの過程なども教えていただけると助かります。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • 退会済みユーザー

    2018/04/13 13:45

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

  • キャンセル

回答 4

+13

ヘッダファイルなしのプログラムにこだわるのはヘッダファイル 自体に無駄が多いため、ソースコードとは関係ないものでエラーを出すためです。c~~~~ 

自身の不理解を棚に上げてエラーが出るのはヘッダーのせいだなどと批判するのは、OpenCVの作者に対して失礼というものです。作者に対する敬意が微塵も感じられません。

エラーが出るのは使い方が間違っているからです。

OpenCVを満足に使えるようになるまでは、無理に自分でビルドしようとせずに、まずはビルド済みのパッケージを利用し、ドキュメントをしっかりと読み込むことをお勧めします。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/13 14:03

    自分では全く無礼だと感じずに質問していました。
    毎度毎度謝るばかりです。
    大変無礼な事をしました。
    本当に申し訳ありません。

    キャンセル

  • 2018/04/13 14:28

    やるのは構わん、けど恒久的な対処にはなり得ない。
    なので、うまくいったら次どうすんだ? に興味があります。

    キャンセル

  • 2018/04/13 18:32

    > うまくいったら次どうすんだ? に興味があります。

    確かにそれはそれで興味深いところではありますが、うまくいくまでには、さらに幾度となく質問が繰り返されるだろうことは想像に難くないわけで……。

    キャンセル

  • 2018/04/13 20:56

    遅くなり申し訳ありません。
    うまくいったら、opencvや誰かの作った関数を標準関数のみで置き換えてどのように標準関数で組んだのかなどを分析したいと思っています。そこらか標準関数を用いて自分だけの関数やOpencvを改造したいと考えています。
    それに意味があると私は思っています。

    キャンセル

  • 2018/04/13 21:03 編集

    1.あちこちから探してきたコードをとっかえひっかえしては動かねー動かねーと質問を繰り返すのはナゼ?
    2.ヘッダ#includeしてたら不可能なことなの? それはナゼ?

    キャンセル

  • 2018/04/13 22:21 編集

    > それに意味があると私は思っています。

    意味を見いだすことは素晴らしいことです。頑張ってください。
    ただし、ライブラリー提供者の想定外の使い方をする場合は完全に自己責任です。それによって起こり得る問題はすべて自力で解決しなくてはいけません。うまくいかないからといって質問をしたところで満足のいく回答は期待できないでしょう。
    なぜなら、OpenCV利用者、特に自在に使いこなせる程の上級者は、提供されているクラスや関数などを駆使して期待通りの結果を得ることに意味を見いだし、そのためにはどうすれば良いかを知っているからです。

    キャンセル

  • 2018/04/13 22:29

    1、自分でも試行錯誤しているのですができなかった場合とできた場合で自分よりも良い方法で解決しているのではないかと考えると質問してしまいます。頼りすぎはよくないのはわかっています。悪い癖です。
    2、プログラム上の関数がどのように定義されているかはヘッダファイルに書いてありますが、より関数を理解するためにヘッダファイルに書いてある定義をプログラムの関数に直接書き込むことをしていました。結果としてヘッダファイルがなくても良いのではないかと間違った考えに至りました。

    キャンセル

  • 2018/04/13 22:36

    1. 異なるサンプルで同様の質問を繰り返すのはなぜ?
    2. ヘッダに書かれているのは定義じゃない。宣言だ。それは関数の使い方であって、その実装ではないことはわかってるよね? で、それを直接書き下すことが「より関数を理解する」ことになるのはナゼ?

    申し訳ないが、理解不能なのですわ。

    キャンセル

  • 2018/04/14 00:56

    えーと、その、うまく説明できないのですが、一つの問題を考えると複数の問題が発生するのです。
    簡単にいうと例えばC言語プログラムを勉強するはずが掘り下げすぎてアセンブリ言語やAPIなどの勉強になっていたり、最初の目的と違うことがしばしあり困ることがあります。
    2においての間違い、申し訳ありません。直書きするというか、その関数に必要な宣言を書くことでその関数がどんなことをする関数で何が必要で…などと関数に関する理解が深まるのです。自分はこの方が勉強しやすいと思いました。
    なので、他の方からしたらなんでそんなことをしているのだろうと思われても仕方ないと考えています。といいつつもこちらで質問している以上は皆様のわかるように説明しなければなりません。

    キャンセル

  • 2018/04/14 07:21

    > その関数に必要な宣言を書くことでその関数がどんなことをする関数で何が必要で…などと関数に関する理解が深まるのです。

    Visual Studio なら関数にポインタ重ねるだけでプロトタイプ宣言を見せてくれる。
    繰り返すが、なぜにgccにこだわる? gccじゃできないことがあるのか?

    キャンセル

  • 2018/04/14 07:32

    あと、プロトタイプを直書きする方法はC++だといずれ絶対に破綻する。

    キャンセル

  • 2018/04/14 09:35

    >>Visual Studio なら関数にポインタ重ねるだけでプロトタイプ宣言を見せてくれる。
    忘れていました。

    >>なぜにgccにこだわる? gccじゃできないことがあるのか?
    そんな事はございません。単純にコマンドプロンプトから実行できれば良くなってきたためgccとvsの開発用のコマンドプロンプトを使っています。もちろん両方同時には使いません。

    >>プロトタイプを直書きする方法はC++だといずれ絶対に破綻する。
    全く知りませんでした。
    なぜでしょうか?融通が利かないためですか?

    キャンセル

  • 2018/04/14 09:48 編集

    ヘッダの展開をやってりゃそのうち気づくだろうよ。
    # てかそろそろ気づいてほしい

    キャンセル

  • 2018/04/14 11:36

    > 直書きするというか、その関数に必要な宣言を書くことでその関数がどんなことをする関数で何が必要で…などと関数に関する理解が深まるのです。自分はこの方が勉強しやすいと思いました。

    で、その方法で勉強して何を習得できましたか? cvNamedWindowに関する理解は深まりましたか?

    その関数が何をする関数で何が必要なのかはドキュメント(リファレンス)に書かれています。OpenCVはとても詳細なドキュメントを用意してくれています。宣言を書き写したところでそれ以上の情報は得られませんから。そして、関数に関する理解を深めたいのなら、とにかく使ってみることです。以前私がまずは動くものを作れといったことはもうお忘れでしょうか。プログラミングにおいては、実際に動かしてみて「この引数をいじるとどう変わるのか」などといろいろ試してみることが理解を深める最も効果的な方法です。

    キャンセル

  • 2018/04/14 16:32

    >>ヘッダの展開をやってりゃそのうち気づくだろうよ。
    過去にヘッダファイルの内容を全て移してコンパイルしたときヘッダファイルの宣言が重複するとかのエラーが出たので、エラーがでるため破綻すると言われたのではないでしょうか?

    キャンセル

  • 2018/04/14 16:38 編集

    >>その方法で勉強して何を習得できましたか? cvNamedWindowに関する理解は深まりましたか?
    はい、cvNamedWindowを使うために必要な宣言とどのような標準ライブラリ関数から組まれているのかわかりました。
    この勉強はかなり地味ですが、私にとっては力になります。
    >>以前私がまずは動くものを作れといったことはもうお忘れでしょうか。
    大切な事を忘れていました。

    キャンセル

  • 2018/04/14 18:07

    > はい、cvNamedWindowを使うために必要な宣言とどのような標準ライブラリ関数から組まれているのかわかりました。

    本当ですか? それが判っているのに、エラーが解決できないとい言って質問してくるのはどういうことでしょうか。
    例えば、「#define cvNamedWindow;」←これが何のためにあるのか私には理解できませんが、あなたは何をどう理解してそれが必要だと思ったのですか?

    キャンセル

  • 2018/04/15 00:51

    ごめんなさい、嘘をつきました。完全には理解できていませんでした。cvWaitKeyにおいてうまく宣言が書くことが出来ず、結局ヘッダファイルを使ったところ実行ファイルが得られました。画像は指定していないたウィンドウが出れば成功で実行したところウィンドウが出ました。
    以下がソースコードです。
    #include <opencv/cv.h>
    #include <opencv2/highgui.h>
    #define CV_WINDOW_AUTOSIZE 0x00000001
    int flags = CV_WINDOW_AUTOSIZE;
    int cvNamedWindow(const char* name, int flags);
    //void cvWaitKey(int);
    void cvDestroyWindow(const char*);
    int main() {
    cvNamedWindow("test", CV_WINDOW_AUTOSIZE);
    cvWaitKey(0);
    cvDestroyWindow("test");
    return 0;
    }

    >>#define cvNamedWindow;
    に関しましては、cvNamedWindowが引数にとるCV_WINDOW_AUTOSIZEはint flagsを表し、#define CV_WINDOW_AUTOSIZE 0x00000001よりflagsが1の時、画像を表示するのだとわかりました。(もしかしたら違うかもしれません。)

    ちなみに載せていただいたソースコード

    #define CV_WINDOW_AUTOSIZE 0x00000001
    int flags = CV_WINDOW_AUTOSIZE;
    int cvNamedWindow(const char* name, int flags);
    void cvWaitKey(int);
    void cvDestroyWindow(const char*);
    int main() {
    cvNamedWindow("test", CV_WINDOW_AUTOSIZE);
    cvWaitKey(0);
    cvDestroyWindow("test");
    return 0;
    } 
    をビルドした際は1>Source.cpp
    1>Source.obj : error LNK2001: 外部シンボル ""void __cdecl cvWaitKey(int)" (?cvWaitKey@@YAXH@Z)" は未解決です。
    1>Source.obj : error LNK2001: 外部シンボル ""void __cdecl cvDestroyWindow(char const *)" (?cvDestroyWindow@@YAXPEBD@Z)" は未解決です。
    1>Source.obj : error LNK2001: 外部シンボル ""int __cdecl cvNamedWindow(char const *,int)" (?cvNamedWindow@@YAHPEBDH@Z)" は未解決です。
    1>C:\Users\Daito\source\repos\Project5\x64\Release\Project5.exe : fatal error LNK1120: 3 件の未解決の外部参照
    1>プロジェクト "Project5.vcxproj" のビルドが終了しました -- 失敗。
    ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
    と出てしまい、pathの確認、ライブラリの指定も行ったのですがエラーが消えず結果としてヘッダファイルを取り付けて少し変えさせていただいたコードをビルドしてうまくいきました。せっかくヘッダファイルなしのコードを載せていただいたにも関わらず使いこなすことが出来ず残念でなりません。
    ttyp03さんには申し訳ないことをしてしまいました。
    ですが、あきらめたわけではありません。
    ビルドエラーを解消するために奮闘しております。

    キャンセル

  • 2018/04/15 01:21 編集

    正しくは以下のとおり:

    // Source.cpp
    #define CV_WINDOW_AUTOSIZE 1
    extern "C" {
    int cvNamedWindow( const char*, int );
    int cvWaitKey(int);
    void cvDestroyWindow(const char*);
    }

    int main () {
    cvNamedWindow ("test", CV_WINDOW_AUTOSIZE);
    cvWaitKey (0);
    cvDestroyWindow ("test");
    return 0;
    }

    キャンセル

  • 2018/04/15 07:58

    >> #define cvNamedWindow;
    > に関しましては、cvNamedWindowが引数にとるCV_WINDOW_AUTOSIZEはint flagsを表し、
    > #define CV_WINDOW_AUTOSIZE 0x00000001よりflagsが1の時、画像を表示するのだと
    > わかりました。(もしかしたら違うかもしれません。)

    回答になっていない。
    #define cvNamedWindow;
    が何を意味する(と考えた)か答えよ。

    キャンセル

  • 2018/04/15 14:10

    cvNamedWindowを定義するという意味ではないでしょうか?
    cvNamedWindowを使えるようにする意味だと思います。

    キャンセル

  • 2018/04/15 14:18

    だったらなぜエラーになるんだ?!

    キャンセル

  • 2018/04/15 14:22

    今はエラーが消えたため、推測でしかないのですが、
    ライブラリの指定がちゃんとできていなかった為だと思います。

    キャンセル

  • 2018/04/15 14:25

    えーと....教本はどんなの使ってます?

    キャンセル

  • 2018/04/15 14:33

    ちなみに
    extern "C" {
    int cvNamedWindow( const char*, int );
    int cvWaitKey(int);
    void cvDestroyWindow(const char*);
    }

    int main () {
    cvNamedWindow ("test", 1);
    cvWaitKey (0);
    cvDestroyWindow ("test");
    return 0;
    }
    でもビルドできました。決して適当ではなく考えて書きました。

    キャンセル

  • 2018/04/15 14:34

    詳解Opencvです。今回載せたプログラムはサイトから拾いました。

    キャンセル

  • 2018/04/15 14:35 編集

    そーじゃなくて、C/C++の教本。
    その調子だと、本にあるとおりのものしか書けないんじゃなくて?

    キャンセル

  • 2018/04/15 14:51

    すいません。10日でおぼえるC言語入門教室で勉強しています。
    https://www.amazon.co.jp/10%E6%97%A5%E3%81%A7%E3%81%8A%E3%81%BC%E3%81%88%E3%82%8BC%E8%A8%80%E8%AA%9E%E5%85%A5%E9%96%80%E6%95%99%E5%AE%A4-%E7%AC%AC3%E7%89%88-%E5%9D%82%E4%B8%8B%E5%A4%95%E9%87%8C-ebook/dp/B00G9QJD98

    キャンセル

  • 2018/04/15 14:51

    Ⅽ++はまだ勉強していません。

    キャンセル

  • 2018/04/15 14:58

    ...そんなんで大丈夫???

    キャンセル

  • 2018/04/15 15:00

    正直わかりません。(たぶんまずいとは思いますが、どんな参考書で勉強してよいかわかりません。)

    キャンセル

  • 2018/04/15 15:01

    どう考えても大丈夫じゃないです。こんなではたかが知れた力しか付きません。(偉そうに言える立場ではないですが)

    キャンセル

  • 2018/04/15 15:06

    ...なんかいろんなもんをすっとばして高みを目指していませんか?

    キャンセル

  • 2018/04/15 15:10

    そうかもしれません。過去にも同じことを言われ基礎固めとして10日でおぼえるC言語入門教室を購入しました。
    高みを目指していますが、まだ全然無理なので簡単な本で基礎固めと思ったのですが、ダメだったでしょうか?

    キャンセル

  • 2018/04/15 15:51

    あの、先ほどIDAで実行ファイルを逆アセンブルしたところ
    sub rsp, 28h
    mov edx, 1
    lea rcx, aTest ; "test"
    call cs:__imp_cvNamedWindow
    xor ecx, ecx
    call cs:__imp_cvWaitKey
    lea rcx, aTest ; "test"
    call cs:__imp_cvDestroyWindow
    xor eax, eax
    add rsp, 28h
    retn
    main endpより
    call cs:__imp_cvNamedWindowと出てきました。
    このcvNamedWindowはライブラリだと思うのですが、標準ライブラリ関数で書かれたcvNamedWindowを見る方法はcvNamedWindowを逆アセンブルしてアセンブリプログラムにした後、Ⅽ言語に手書きで地道にしていく以外にないのでしょうか?
    多分、なんでそんなことするのだろうと思われますが、ライブラリの基のソースが見たいという好奇心と、次はライブラリがなくてもビルドできるようにしたいためです。

    キャンセル

  • 2018/04/15 16:02

    何言ってんだかわかんない。ライブラリのソースが読みたいなら読めばいい。
    OpenCVでしょ? 手元にあるぢゃん。

    キャンセル

  • 2018/04/15 16:05

    そうですよね。すいません。
    あの>>そうかもしれません。過去にも同じことを言われ基礎固めとして10日でおぼえるC言語入門教室を購入しました。
    高みを目指していますが、まだ全然無理なので簡単な本で基礎固めと思ったのですが、ダメだったでしょうか?
    に関してはどうしたらよいでしょうか。基礎固めに本を買ったのですが、私には難しいということですか?ならばもっと簡単な本にします。

    キャンセル

  • 2018/04/15 16:07 編集

    「10日でおぼえるC言語入門教室」の内容が書名どおりなら、そいつでたどり着けるのはやっと"登山口"まででしょうね。高みには程遠い。
    とはいえまずは"登山口"に辿り着かんとどーしよーもないけど。
    ...そうねぇ、OpenCVは一旦封印してひたすらその本を読み、コードを試し、必要ならココに質問して"登山口"を目指してはいかが?

    キャンセル

  • 2018/04/15 16:26

    そうですよね。Opencvを扱うにはあまりにも背伸びしすぎました。
    焦りは禁物とわかっていながらも焦らなくては落ち着けません。
    epistemeさんのアドバイスに従い一旦Opencvからは離れます。その方が今の自分のためになります。登山口目指して勉強し調べてもわからず困ったら質問させていただきます。
    どうもありがとうございます。標準ライブラリ関数を扱えるよう頑張ります。
    あの大変恐縮なのですが、epistemeさんは学生時代、C/C++はなんの参考書を扱っていたのでしょうか?
    差し支えなければ教えてください。

    キャンセル

  • 2018/04/15 16:36

    「プログラミング言語 C」これしかなかった(35年前)。
    訳がスットコドッコイな箇所が少なくなかったので原書と並べて読んだ。

    キャンセル

  • 2018/04/15 16:39

    > 標準ライブラリ関数を扱えるよう頑張ります。

    頑張りの方向がちがうよ。

    キャンセル

  • 2018/04/15 16:50

    えーと、どの方向に頑張ればいいのですか?

    キャンセル

  • 2018/04/15 16:50

    ありがとうございます。早速調べてみます。

    キャンセル

  • 2018/04/15 16:57 編集

    > えーと、どの方向に頑張ればいいのですか?

    阿呆。標準ライブラリが使えたら登山口か? んなわけねーだろ。
    https://teratail.com/questions/120623 こんな質問せずに済むようになりなさい。

    What(やりたいこと) から How(実現手段) を導くのがプログラマのお仕事です。

    キャンセル

  • 2018/04/15 17:05

    「プログラミング言語 C」は今となってはホコリにまみれててお薦めしかねる。
    読みたいなら止めはしないが。

    キャンセル

  • 2018/04/15 17:10

    はい!わかりました。手取り足取りご親切に教えていただきどうもありございます。大変難しいですが、やってみます。
    最後に、ツイッターの質問に答えていただくことは出来ないでしょうか。
    決して悪ふざけなどではなく、好奇心というか好奇心でも悪ふざけに見えてしまうのかもしれませんが、やましい気はございません。純粋に知りたいと思いました。もし嫌でしたら無視していただいて構いません。
    あ、そうなのですか。でも私みたいな基礎能力のない人間には勉強になることは間違いないでしょう。一回書店に足を運んで見に行きます。できれば今日にでも。

    キャンセル

  • 2018/04/17 17:55

    epistemeさん、今更で申し訳無いのですが、先程見直しとしてvsでcvNamedWindownにポインタを重ねると関数定義が見つかりませんと出てきました。
    質問なのですが、cv Name Windowの見つからない定義自体もソースコードに書き込めばopencv world.libを使わなくてもビルドできるわけですよね?
    実装するつもりはないですが、理論が正しいか聞きたいです。

    キャンセル

  • 2018/04/17 19:07

    YES.

    キャンセル

  • 2018/04/17 19:10

    どうもありがとうございます。

    キャンセル

+6

こうですかねぇ。

int cvNamedWindow( const char* name, int flags );
void cvWaitKey (int);
void cvDestroyWindow (const char*);
#define CV_WINDOW_AUTOSIZE 0x00000001
int main () {
    cvNamedWindow ("test", CV_WINDOW_AUTOSIZE);
    cvWaitKey (0);
    cvDestroyWindow ("test");
    return 0;
}


書き忘れてたので追記します。

ヘッダファイルなしのプログラムにこだわるのはヘッダファイル 自体に無駄が多いため、ソースコードとは関係ないものでエラーを出すためです。

エラーが出るのは必要なインクルードを十分にしていないからです。
OpenCVのようなきちんとした配布物でエラーが出るなんてありえないです。
なのでマニュアルなりサンプルなりを良く理解して使うようにしてください。
またあなたがヘッダーファイルを独自に改変して使うのは構わないですが、バージョンアップやアップデートがあった場合、あなたはまたヘッダーファイルを解析して必要な部分のみを抜き出す作業をしないといけません。
そんな無駄な作業をするのであれば、前述どおり使い方を良く理解して、エラーが出ないコードを書くべきです。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/13 14:00

    >>マニュアルなりサンプルなり
    やっていても出来ないとなると私は日本語がちゃんと理解出来ていないのだと思いました。

    どうもありがとうございます。

    キャンセル

  • 2018/04/13 20:00

    てか件のサイトにあるやつは OpenCV 2.1 だぞ。バージョンの違いによる問題ではないことを確認したのか?

    キャンセル

  • 2018/04/13 20:13

    ごめんなさい。少しお待ちください。

    キャンセル

  • 2018/04/14 10:13

    ...で、どうだった? 僕とこでは OpenCV 3.4.1 でもコンパイルできることを確認したぞ。

    キャンセル

+2

#includeでヘッダファイルを取り込み(インクルード)している部分を、ヘッダファイルの中身で置き換えてゆく。

置き換えたヘッダファイルの中に#includeがあれば、それもヘッダファイルの中身で置き換える。

この作業を#includeが無くなるまで繰り返せば、全ての取り込まれるべきヘッダファイルがソースコードに含まれることになり、ヘッダファイルは不要になります。

長大なヘッダファイルの内容がソースコードの最初に挿入されますから、読みやすくはないと思いますが。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/13 14:05

    基礎を勉強し直します。
    どうもありがとうございました。

    キャンセル

  • 2018/04/14 10:15

    #includeをすべて展開してくれる機能は gcc, vc++ 共にあります。手作業でやる必要なし。

    キャンセル

+2

https://www.amazon.co.jp/dp/B00EYXMA6Q/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

これは比較的難しい本ですが、ヘッダーファイルを用いるモチベーションが書かれています。
たまに日本語が変ですが、翻訳本によくあることなので大目に見てやってください。

ヘッダーファイルを使わなくても、プログラムが動くために必要な実装は変わりません。

ライブラリは面倒くさい実装を自分でやらなくてもいいようにしたものという認識があれば、今回のような質問が出ないかと思います。

本来のオブジェクト指向から逆行するにはまだプログラミング経験が足りないように見受けられます。

まずはマニュアルをなぞってはいかがでしょうか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/14 00:50

    どうもありがとうございます。
    初めて見ました。少し高いですが、購入を考えます。
    ちなみにmkgreiさんはお持ちでしょうか?

    キャンセル

  • 2018/04/14 01:07

    電子版で読みました。
    固定レイアウトなので、端末が小さいと読みにくいかもしれません。

    内容としてはAPIのためのデザインなので、opencvのようなライブラリ開発側の立場からみたクラスの設計方針などが内容です。

    カプセル化と隠蔽についての設計思想が述べられていて、ライブラリを変な使われ方をされないようにするためにどうすれば良いのかについて議論があった記憶があります。

    少々高いので簡単には手が出ませんが、使用者以外の視点を持ってコードをみる視点を感じ取ることができるかもしれません。

    キャンセル

  • 2018/04/14 16:39

    どうもありがとうございます。

    キャンセル

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

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

関連した質問

  • 受付中

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

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

  • 解決済

    opencvのcvConvertScaleAbs関数エラーを直したい

    こんにちは。 どうしても解決できず、ずっと悩んでいるのでご助力いただけないかと思い投稿しました。 前提・実現したいこと XcodeでC++、opencvを用いて行列操作を

  • 解決済

    opencvの連番読み込み

    今まで、iplimage型でコードを書いていたのですが、 多くの人の指摘があり、mat型に変更したいと考えています。 そこで、画像の連番読み込み、保存を行いたいと考えていま

  • 解決済

    opencv 動画 再生

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

  • 受付中

    カメラで青い円を検出

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

  • 解決済

    OpenCVを用いた物体検出

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

  • 解決済

    ファイル名に変数を用いて繰り返し読み込み処理を行いたい

    現在画像編集のプログラムopnCVとC++を用いた上で作成している初歩的段階です。 複数枚の画像に対してimreaの処理をかけた上で繰り返し画像の読み込み画像番号順に(1から並んで

  • 受付中

    OpenCV3.4.1で画像の2値化を行いたい

    実現したい事 visual studioでOpenCVを用いて画像を2値化するC++のソースを書いたのですが、エラーが出てうまくいきません。エラーの内容的に冒頭のincludeのと

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

  • C

    3561questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    3328questions

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

  • OpenCV

    1017questions

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