空飛ぶ気まぐれ雑記帳

主に趣味とかプログラミングについて扱います。

OpenCV2.4.7…知らない子ですね

知らない内にOpenCV2.4.7がリリースされていた。


知らないと思ったら、それはそうだ。なにせデスマ&ノートPCが一時使えない状態にあったのだから。

それはそうと、更新内容としては

  • OpenCLへの新規最適化の追加とバグの修正など
  • CUDAでのバグの修正
  • Android NDKの最新版への対応
  • その他のバグの修正


らしい。
OpenCLって何だったかなと思って調べてみると多種多様なデバイス(GPUとかCPU)を利用した並列計算を共通のAPIで扱うことができるらしい。CUDAとOpenCLどちらのほうが早いのか気になる所だが、あまりホイホイやってると他の環境でコンパイルするときに面倒なので、需要があれば今度試すことに。

とりあえず、その他のバグの中にWindows版でのコンパイルエラーが含まれているのかがすごく気になったのでとりあえずダウンロードして来ることに。

いつも通りcmakeしてからプロジェクトファイルを開いてビルド。。。


結論から言うと直ってません。
少なくとも私の環境(VS2013 EE)では。

とりあえずエラー内容の確認

  • maxはstdのメンバではありません
  • {に対応する}がありません

だ。
1つ目は"opencv/sources/3rdparty/openexr/IlmImf/ImfHeader.h"に"#include "を追加するだけ。
もしこれでmaxは~のエラーがでるならそのファイルにも"#include "を追加してください。

2つ目は自分では良くわからなかったのでOpenCVのWebForumから、、、

http://answers.opencv.org/question/18934/errors-building-opencv-246-with-visual-studio-2013/

GitHubのpull requestでは178行目になっていますが、自分の環境では184行目を

obj.info()->addParam<FeatureDetector>(obj, "detector", obj.detector, false, 0, 0);

に変更。
これでコンパイルできるはずです。


さてさて、ソースコードを編集してコンパイルしたのでちゃんと動くかどうかテストついでに昔書いた適当なコードをコンパイルしてみることに。
エラー処理は省いてあるのでそこはご注意ください。

#include <string>
#include <opencv2/opencv.hpp>
#include <Windows.h>

int main(int argc,char** argv)
{
  auto&& src = cv::imread(argv[1]);

  if (src.empty())
  {
    return -1;
  }

  cv::cvtColor(src, src, CV_BGR2GRAY);
  cv::threshold(src, src, 120, 255, CV_THRESH_BINARY);
  cv::namedWindow("main");

  for (int i = 0; i < 360; ++i)
  {
    cv::Mat img;
    auto&& rot_mat = cv::getRotationMatrix2D(cv::Point(src.cols / 2, src.rows / 2), i, 1.0);
    cv::warpAffine(src, img, rot_mat, src.size());


    cv::imshow("main", img);
    
    auto c = cv::waitKey();
    switch (c)
    {
    case VK_RETURN:
      break;
    case VK_ESCAPE:
      return 0;
    default:
      --i;
    }
  }

  return 0;
}