2017年9月8日金曜日

Boostを使って日付と時間をファイル名に

日付と時間をファイル名を含めて毎回新しいログファイルを保存するサンプルコード.
Boostライブラリのインストールが必要.

Visual Studioのプロジェクト:
https://github.com/r168xr169/NameDateTime

#include <string>
#include <fstream>
#include <boost/format.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

void main(void) {
    using boost::posix_time::ptime;
    using boost::posix_time::second_clock;
    using namespace boost::gregorian;

    date today = day_clock::local_day();
    ptime now = second_clock::local_time();

    //open file
    std::ofstream ofs;

    //create a new file
    std::string filename = (boost::format("%s_%s.txt")
        % to_iso_string(today) % to_iso_string(now.time_of_day())).str();
    ofs.open(filename);

    //output "[time]: test"
    ofs << to_iso_string(now.time_of_day()) << ": test" << std::endl;
}

2017年9月2日土曜日

OpenCVでウィンドウ枠を消す

OpenCV (version 3.1.0)でウィンドウを表示するのはすごく便利だけど, プロジェクタに映像を出す場合などでフルスクリーンにしてもなぜか枠が消えない. 最も単純な方法はこれ.

int w = 1920; //メインディスプレイの水平解像度
cv::namedWindow("projector", 0);
cv::moveWindow("projector", w, 0);
cv::setWindowProperty("projector", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
HWND hwnd = FindWindow(0, L"projector");
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP);

SetWindowLong()で枠なしを指定する次のような方法も解説で書かれているけどやっぱり枠が消えない.

int w = 1920; //メインディスプレイの水平解像度
cv::namedWindow("projector", 0);
cv::moveWindow("projector", w, 0);
cv::setWindowProperty("projector", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
HWND hwnd = FindWindow(0, L"projector");
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP);

枠の色を黒に変更することでとりあえず枠が見えないようにすることはできたのでメモ.

int w = 1920; //メインディスプレイの水平解像度
cv::namedWindow("projector", 0);
cv::moveWindow("projector", w, 0);
cv::setWindowProperty("projector", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
HWND hwnd = FindWindow(0, L"projector");
SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG)CreateSolidBrush(RGB(0, 0, 0)));