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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C

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

C++

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

Q&A

解決済

1回答

290閲覧

opencvを標準ライブラリで表したプログラムで表示したい。

carnage0216

総合スコア194

C

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

C++

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

0グッド

0クリップ

投稿2018/01/24 07:46

例えば以下のプログラムに書いてある cv::MatやCV_Assertなど標準ライブラリではないopencv特有の部分を標準ライブラリ(int,printf,whilenなど)で表示したいのですが
その場合はどのようにすればよいのでしょうか?
visual studio 2015で行いたいと考えています。
環境はWindows10、64ビットです。

#include <iostream> #include <opencv2/core/core.hpp> int main(int argc, char *argv[]) { // 64F, channels=10, 3x3 の2次元配列(行列) cv::Mat m1(3, 3, CV_64FC(10)); cv::Mat m2(3, 3, CV_MAKETYPE(CV_64F, 10)); CV_Assert(m1.type() == m2.type()); std::cout << "mat1/mat2"<< std::endl; std::cout << " dims: " << m1.dims << ", depth(byte/channel):" << m1.elemSize1() \ << ", channels: " << m1.channels() << std::endl; // 64F, channles=1, 2x2x3x4 の4次元配列 const int sizes[] = {2, 2, 3, 4}; cv::Mat m3(sizeof(sizes)/sizeof(int), sizes, CV_64FC1); CV_Assert(m3.dims == sizeof(sizes)/sizeof(sizes[0])); CV_Assert(m3.rows == -1); // 3次元以上のMatでは, CV_Assert(m3.cols == -1); // 常にrows==cols==-1 std::cout << "mat3"<< std::endl; std::cout << " dims: " << m3.dims << ", depth(byte/channel):" << m3.elemSize1() \ << ", channels: " << m3.channels() << std::endl; } コード

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

註:直接的な回答ではありません。

あなたが今やるべきことは、入門書を買ってそれを反復して勉強することです。
数多の優秀なプログラマが長年かけて構築したフレームワークをハックすることではありません。

なぜOpenCVが広く使われているのか考えてみてください。
高速で/バグがなくて/高機能で/わかりやすいからですよね?


まず『車の運転』を覚えるべきであって、エンジンの仕組みは後回しで良いんです。
先日もcatsforepawさんが同様のたとえ話をしています。引用元

「私は将来優秀な外科医になることを目指す。そのためにはメスさばきがうまくなければいけない。その練習をしたいがどうすれば良いか?」と聞いているようなものです。外科医を目指すならまずは医学を学ばないと。

投稿2018/01/24 08:16

LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/01/24 08:28

はい・・・・。 では機械学習で画像処理を行うために、opencvの入門書を買います。
LouiS0616

2018/01/24 08:34

厳しい言い方になってしまってすみません。 原理的な部分を学ぼうという姿勢は素晴らしいと思いますが、いかんせん段階が早すぎるのです。 なにかターゲットを一つに絞った方が良いですよ。 画像処理と機械学習とCとC++とPythonを同時に学ぶのはほとんど不可能です。 --- C++での画像処理を学ぶのなら、OpenCVの参考書を買って、C++はそれを表層的に理解するのに足りる分だけ学べばいいです(『とりあえず』ですよ!)。 その後は画像処理の知識を活かして機械学習を学んでもいいですし、C++を鍛え上げるのもありです。 結局順番の問題なのです。
carnage0216

2018/01/24 08:48

いえいえ、初心者の私が出しゃばり過ぎました。 そうですね。Ⅽ++は勉強するには早すぎるので、ⅭかPythonのどちらかを学習したいと考えています。 これに関しては書店に足を運んで、詳しく書いてるopencv(NVIDIAのGPUを使った)入門書が扱っている言語を使っていきます。
LouiS0616

2018/01/24 08:52

CのOpenCVは確か既にサポート外ですので、それならばPython+OpenCVを学ぶことをお勧めします。 また、技術系の書籍は古いとあまり使い物にならないので、購入する際は出版年も気にしてみてください。
LouiS0616

2018/01/24 08:54

あ、あとPythonのバージョンもだ。 Python2.7で書いてある書籍は参考にならないので、バージョンが3系であるかどうかは要チェックです。
carnage0216

2018/01/24 11:18

返信ありがとうございます。 C言語のopencvがサポート外とは、えーと、何かが出来なかったりするのでしょうか?
carnage0216

2018/01/24 11:21

勘違いだとしたら申し訳ないのですが、pythonのopencv版はC言語で書かれていると聞いたことがあるのですが、本当でしょうか? どうかよろしくお願い致します。
LouiS0616

2018/01/24 11:37 編集

OpenCVには2系と3系があるのですが、C言語に対応しているのは古い2系のみです。 既存システムのために残してあるだけだったように思います。 というか、生のC言語を使う機会って実はあんまりありません。 速度を追求するために熟練したプログラマが使うか、 あるいは組み込みなど特殊な制約がある環境で用いられる印象です。
LouiS0616

2018/01/24 11:36

最新のOpenCVライブラリはほとんどC++で書かれているようです。 C言語も基幹に残ってはいるようですが。
catsforepaw

2018/01/24 13:12 編集

引用されついでに私からも一言二言。 私の経験から申しますが、OpenCVが中で何をやっているのかを、その挙動からぼんやりとでもイメージできないのであれば、それは必要な知識が足りないのであって、その状態でソースを読んでも意味が判らないでしょう。時にはソースからアルゴリズムを解析することもありますが、それには相当高度なプログラミングスキルが要求されます(その場合でも足りない知識は随時補うことにはなります)。 重ね重ねになりますが、段階を踏んでください。学問に王道なしとは言いますが、自分のレベルに見合う手段でこつこつと知識を蓄え、時には試行錯誤を繰り返しながら一つ一つできることを増やしていくことが、結果的には一番の近道なのです。teratailのランキング上位に並んでいる方々は、皆そうしてきたのです。
carnage0216

2018/01/24 13:15

なんだか、環境を整えるだけで大変そうですね。 一応、今日 書店のほうに行きまして「GPU高速動画像処理―OpenCVでGPUの処理能力をより身近に 」を読んでみたのですが、C言語で書いていたような気がします…。 Pythonも見てみようとしたのですが置いてありませんでした。
LouiS0616

2018/01/24 13:28

高速化は非常に難しい話題で、幅広い知識が必要になります。 なんでそこまで高速であることにこだわりがあるかわかりませんが、印象としては『免許も持ってないのにF1カーの細かなチューニングを学ぼうとしている』と言った感じでしょうか。 あと、その本は四年前の出版ですよ。 内容が基礎的でなくて、しかも古いとなると入門には向かないです。
LouiS0616

2018/01/24 13:31

@catsforepaw さん 無断の引用となってしまいましたが、コメントありがとうございます。
carnage0216

2018/01/24 13:34

そうですか。サイトを基にPythonを使っていきます。どうもありがとうございました。
catsforepaw

2018/01/24 13:36

LouiS0616 さん 引用に許可などいりませんからお気になさらず。むしろ光栄です。
a_saitoh

2018/01/25 02:22

「opencvを標準ライブラリで表したプログラムで表示したい。」ってのがライセンス的にOpenCVが使えないからってのなら、OpenCVの同等品を自作するしかないので多大な手間(と学習)が必要ですね。 画像処理の勉強をしたいというのが動機なら、同案多数ですが、プログラムを書いたり読んだりするのではなく教科書で画像処理アルゴリズムを学ぶ方が適切と。 画像処理を伴うプログラムを書きたいのなら、あえて自作したりせずにOpenCVをつかうのが正解。
carnage0216

2018/01/25 04:57

画像処理のためのプログラムを書きたいため、opencvを勉強しています。わからない部分は解説書を基に解読しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問