Opencv

前回、ダウンロードと環境変数設定まで完了させ、サンプルコードをコピペし、動かしてみたがエラーだらけで動作せず

グーグル先生の知識から、core.hpp、highgui.hppの場所がよくわからんと文句を言われていることが判明したので、相対パスではなく絶対パスで指定してやると、認識してはくれたが、指定した先のhppファイルからも同様に場所がわからないふじこふじこ言われたためNuGetを使って環境設定をやってもらう

[ツール]-[NuGetパッケージマネージャー]-[ソリューションのNuGetパッケージの管理・・・]
[オンライン]-[Opencvを検索]-[Opencvをインストール]完了


もう一回Ctrl+Shift+Bでビルドを実施してみると・・・
ビルド1で正常終了!
F5でデバッグを実行!


#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
 
int main(int argc, const char* argv[])
{
  cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));
  cv::namedWindow("red", cv::WINDOW_AUTOSIZE);
  cv::imshow("red", redImg);
  cv::waitKey(0);
  cv::destroyAllWindows();
  return 0;
}




うまく動きました!
よくわからないけど結果を見ると、320x240サイズで赤い四角を表示させるものとのこと

RED



















よし、表示はできたので、次のステップとして画像を読み込んでみよう
http://www.buildinsider.net/small/opencv/05

またしてもBuild Insiderさんの記事を参照


#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp> // highguiのヘッダーをインクルード
#include <iostream>

int main(int argc, const char* argv[])
{
  // (1)画像データをファイル(この例では「lena.jpg」)から読み込む
  cv::Mat img = cv::imread("lena.jpg", cv::IMREAD_COLOR);

  // 画像の読み込みに失敗したらエラー終了する
  if(img.empty()) return -1;

  // (2)画像データをファイルに書き出す
  cv::imwrite("lena.png", img);

  return 0;
}


Source.cppファイルに上記をコピペしてビルド、一発完了
実行!

あれ?何も表示されない

よく見てみると、lena.jpgを読み込むようだがそもそもlena.jpgなんてもの入れてないから表示されるはずがない

opencv\sources\samples\cpp/

の中にlena.jpgがあったので、コピーしてVisual Studioのプロジェクトがある場所にコピー

Documents\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1/


無事lenaさんが表示されました!



続いて、これまたBuild Insiderさんを参考にUSBカメラキャプチャを実行してみる


#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp> // highguiのヘッダーをインクルード
#include <iostream>

int main(int argc, const char* argv[])
{
  // (1)DirectShowを使ってカメラキャプチャを行う。
  // また、IDが0番のカメラについてキャプチャの準備を行う
  int camera_id = 0;
  cv::VideoCapture cap(CV_CAP_DSHOW + camera_id);

  // (2)IDが0番のカメラが正しくオープンできているかをチェックする(正しくオープンできていなければエラー終了する)
  if(!cap.isOpened())
    return -1;

  // (3)カメラキャプチャのフレームレートを30.0に指定する
  cap.set(CV_CAP_PROP_FPS, 30.0);

  // 画像表示用のウィンドウを生成する
  cv::namedWindow("image", cv::WINDOW_AUTOSIZE);

  // 画像データを格納するための変数を宣言する
  cv::Mat frame;

  for(;;)
  {
    // (4)カメラから1フレーム分の画像データを取得して、変数frameに格納する
    cap >> frame;

    // 画像データ取得に失敗したらループを抜ける
    if (frame.empty()) break;

    // 取得した画像データをウィンドウ表示する
    cv::imshow("image", frame);
    if(cv::waitKey(30) >= 0) break;
  }
  return 0;
}



当たり前だがこれも一発成功
Webカメラなんて使ったことなかったが、ノートPCに標準搭載されていたのでそれを使用





次はデスクトップをキャプチャしていろいろやろうと考えていたが、Opencv自体にデスクトップキャプチャの機能はないらしい・・・
次回はデスクトップキャプチャを検討してみる


超初心者がOpencvを使って遊んでみた -3- デスクトップキャプチャ