初心者です
実現したいこと
ウェブカメラでcv::Mat画像をリアルタイムで表示しています。
その画像に処理をして、cv::formatでcsv保存しています。
ファイルに保存しているときにファイルのサイズが10MBになったら、ファイルに書き込むのをやめるプログラムを組み込みたいのですが、どういう風に書けばいいのかわからなくて困っています。
このことについて解決したいです。
該当のソースコード
int main() { cv::Mat frame; cv::VideoCapture cam(0); if (!cam.isOpened()) //正常にカメラが起動できなければ終了 { return -1; } cv::Mat XOR = { 0 }; //保存フォルダ指定 std::string path = "........"; //保存ファイル作成 time_t t1 = time(NULL); //現在の日時取得 struct tm local; //日時情報を格納する変数を用意する localtime_s(&local, &t1); //ローカル日時を変数に格納する //文字列への変換 char str[100]; strftime(str, sizeof(str), "%Y%m%d_%H%M%S.csv", &local); std::string filepath = path + "rng_" + str; std::cout << filepath << std::endl; while (cam.read(frame)) { cv::Mat gray; cv::Mat adp_binary; //グレースケール処理 cv::cvtColor(frame, gray, cv::COLOR_BGR2GRAY); cv::imshow("gray", gray); //適応的二値化処理 cv::adaptiveThreshold(gray, adp_binary, 255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv:: THRESH_BINARY, 7, 0); cv::imshow("adp_binaly", adp_binary); cv::Mat XOR1 = adp_binary.reshape(0, 1); int center = adp_binary.rows / 2; cv::Mat cut_array1(XOR1, cv::Rect(center - 23, 0, XOR1.cols - adp_binary.cols, 1)); cv::Mat cut_array2(XOR1, cv::Rect(center + 18, 0, XOR1.cols - adp_binary.cols, 1)); cv::Mat cut_array3(XOR1, cv::Rect(center - 5, 0, XOR1.cols - adp_binary.cols, 1)); cv::Mat cut_array4(XOR1, cv::Rect(center + 7, 0, XOR1.cols - adp_binary.cols, 1)); bitwise_xor(cut_array1, cut_array2, cut_array1); bitwise_xor(cut_array1, cut_array3, cut_array1); bitwise_xor(cut_array1, cut_array4, cut_array1); bitwise_xor(XOR, cut_array1, XOR); cv::Mat tempXOR = XOR.reshape(0, adp_binary.rows - 1); cv::imshow("XOR", tempXOR); std::ofstream ofs; ofs.open(filepath); cv::Mat seq = tempXOR / 100; ofs << cv::format(seq, cv::Formatter::FMT_CSV) << std::endl; ofs.close(); cv::waitKey(100000); } return 0; }
コードを提示しないと答えようもないと思いますが。
回答2件
あなたの回答
tips
プレビュー