teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

検証用のコードを追記

2019/11/15 08:57

投稿

Bull
Bull

スコア986

answer CHANGED
@@ -7,4 +7,50 @@
7
7
  }
8
8
  ```
9
9
  あるいは、cv::format という便利な関数があります。
10
- [超便利!cv::formatについて](https://qiita.com/wakaba130/items/ae7cdd4b9a9c38fbc971)
10
+ [超便利!cv::formatについて](https://qiita.com/wakaba130/items/ae7cdd4b9a9c38fbc971)
11
+
12
+ ---
13
+ 以下追記
14
+ 検証用のコードを作りました。
15
+ 当方の環境では
16
+ `cv::Mat f[1920][1000];`
17
+ でスタックオーバーフローになるので、`static`をつけました。
18
+ ```c++
19
+ #include <opencv2/opencv.hpp>
20
+ #include <stdio.h>
21
+ #include <iostream>
22
+
23
+ int main(void)
24
+ {
25
+ static cv::Mat f[1920][1000];
26
+ for (int j = 0; j < 1000; j++) {
27
+ for (int i = 0; i < 1920; i++) {
28
+ f[i][j].create(10, 10, CV_32FC1);
29
+ }
30
+ }
31
+
32
+ #if 1
33
+ FILE *fp;
34
+ fp = fopen("K.csv", "w");
35
+ if (fp == NULL) {
36
+ printf("%s file can't open\n", "K.csv");
37
+ return 1;
38
+ }
39
+
40
+ for (int j = 0; j < 1000; j++) {
41
+ for (int i = 0; i < 1920; i++) {
42
+ for (int y = 0; y < f[i][j].rows; ++y) {
43
+ for (int x = 0; x < f[i][j].cols; ++x) {
44
+ fprintf(fp, x == f[i][j].cols - 1 ? "%f\n" : "%f,", f[i][j].at<float>(y, x));
45
+ }
46
+ }
47
+ }
48
+ }
49
+
50
+ fclose(fp);
51
+ #else
52
+ std::cout << cv::format(f[0][0], cv::Formatter::FMT_CSV) << '\n';
53
+ #endif
54
+ }
55
+ ```
56
+ 作成されたファイルが巨大なので詳細に検証はしていませんが、19200000 行あることは確認できました。