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

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

ただいまの
回答率

90.76%

  • C

    3464questions

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

  • C++

    3257questions

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

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

解決済

回答 1

投稿

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

carnage0216

score 120

例えば以下のプログラムに書いてある 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;
}
コード
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+5

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

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

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


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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/24 17:28

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

    キャンセル

  • 2018/01/24 17:34

    厳しい言い方になってしまってすみません。
    原理的な部分を学ぼうという姿勢は素晴らしいと思いますが、いかんせん段階が早すぎるのです。

    なにかターゲットを一つに絞った方が良いですよ。
    画像処理と機械学習とCとC++とPythonを同時に学ぶのはほとんど不可能です。
    ---
    C++での画像処理を学ぶのなら、OpenCVの参考書を買って、C++はそれを表層的に理解するのに足りる分だけ学べばいいです(『とりあえず』ですよ!)。
    その後は画像処理の知識を活かして機械学習を学んでもいいですし、C++を鍛え上げるのもありです。

    結局順番の問題なのです。

    キャンセル

  • 2018/01/24 17:48

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

    キャンセル

  • 2018/01/24 17:52

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

    キャンセル

  • 2018/01/24 17:54

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

    キャンセル

  • 2018/01/24 20:18

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

    キャンセル

  • 2018/01/24 20:21

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

    キャンセル

  • 2018/01/24 20:34 編集

    OpenCVには2系と3系があるのですが、C言語に対応しているのは古い2系のみです。
    既存システムのために残してあるだけだったように思います。

    というか、生のC言語を使う機会って実はあんまりありません。
    速度を追求するために熟練したプログラマが使うか、
    あるいは組み込みなど特殊な制約がある環境で用いられる印象です。

    キャンセル

  • 2018/01/24 20:36

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

    キャンセル

  • 2018/01/24 22:12 編集

    引用されついでに私からも一言二言。
    私の経験から申しますが、OpenCVが中で何をやっているのかを、その挙動からぼんやりとでもイメージできないのであれば、それは必要な知識が足りないのであって、その状態でソースを読んでも意味が判らないでしょう。時にはソースからアルゴリズムを解析することもありますが、それには相当高度なプログラミングスキルが要求されます(その場合でも足りない知識は随時補うことにはなります)。

    重ね重ねになりますが、段階を踏んでください。学問に王道なしとは言いますが、自分のレベルに見合う手段でこつこつと知識を蓄え、時には試行錯誤を繰り返しながら一つ一つできることを増やしていくことが、結果的には一番の近道なのです。teratailのランキング上位に並んでいる方々は、皆そうしてきたのです。

    キャンセル

  • 2018/01/24 22:15

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

    キャンセル

  • 2018/01/24 22:28

    高速化は非常に難しい話題で、幅広い知識が必要になります。
    なんでそこまで高速であることにこだわりがあるかわかりませんが、印象としては『免許も持ってないのにF1カーの細かなチューニングを学ぼうとしている』と言った感じでしょうか。

    あと、その本は四年前の出版ですよ。
    内容が基礎的でなくて、しかも古いとなると入門には向かないです。

    キャンセル

  • 2018/01/24 22:31

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

    キャンセル

  • 2018/01/24 22:34

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

    キャンセル

  • 2018/01/24 22:36

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

    キャンセル

  • 2018/01/25 11:22

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

    キャンセル

  • 2018/01/25 13:57

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

    キャンセル

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

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

関連した質問

  • 解決済

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

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

  • 解決済

    byte配列のcv::Matへの画像変換

    byte配列に格納している画像データをMatに画像配列として保存します。この時、cv::imdecodeを使用しています。その後に画素値の変換をかけてcv::imencodeで再び

  • 解決済

    opencvでの画像の回転

    opencvを用いて読み込んだ画像の回転を行っています。 以下のプログラムで画像の回転を行い実行できたのですが、 画像が回転し、元の画像の場所が黒く表示されるのが気に入りません

  • 解決済

    opencvでの画像の読み込み

    opencvで画像の読み込みを行い、テンプレートマッチングを行いたいと考えています。 外部のソフト(IC Imaging Contorol)というアルゴ社のカメラソフトを使い

  • 解決済

    opencv 動画 再生

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

  • 解決済

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

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

  • 解決済

    OpenCVでのcv::Mat型のデータへのアクセス方法

    前提・実現したいこと cv::Mat型のデータへのアクセスの仕方に困っています。 c++とOpenCVを使い画像から特徴量を抽出するプログラムを作成しました。 アルゴリズムはA

  • 解決済

    OPENCVにおけるエラー

    openCVをはじめようとして、以下のエラーがでました。 プログラミング初心者です。 visual studio community 2017を使っています。 opencv3.3.

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

  • C

    3464questions

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

  • C++

    3257questions

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