回答編集履歴

1

検証用のコードを追記

2019/11/15 08:57

投稿

Bull
Bull

スコア986

test CHANGED
@@ -17,3 +17,95 @@
17
17
  あるいは、cv::format という便利な関数があります。
18
18
 
19
19
  [超便利!cv::formatについて](https://qiita.com/wakaba130/items/ae7cdd4b9a9c38fbc971)
20
+
21
+
22
+
23
+ ---
24
+
25
+ 以下追記
26
+
27
+ 検証用のコードを作りました。
28
+
29
+ 当方の環境では
30
+
31
+ `cv::Mat f[1920][1000];`
32
+
33
+ でスタックオーバーフローになるので、`static`をつけました。
34
+
35
+ ```c++
36
+
37
+ #include <opencv2/opencv.hpp>
38
+
39
+ #include <stdio.h>
40
+
41
+ #include <iostream>
42
+
43
+
44
+
45
+ int main(void)
46
+
47
+ {
48
+
49
+ static cv::Mat f[1920][1000];
50
+
51
+ for (int j = 0; j < 1000; j++) {
52
+
53
+ for (int i = 0; i < 1920; i++) {
54
+
55
+ f[i][j].create(10, 10, CV_32FC1);
56
+
57
+ }
58
+
59
+ }
60
+
61
+
62
+
63
+ #if 1
64
+
65
+ FILE *fp;
66
+
67
+ fp = fopen("K.csv", "w");
68
+
69
+ if (fp == NULL) {
70
+
71
+ printf("%s file can't open\n", "K.csv");
72
+
73
+ return 1;
74
+
75
+ }
76
+
77
+
78
+
79
+ for (int j = 0; j < 1000; j++) {
80
+
81
+ for (int i = 0; i < 1920; i++) {
82
+
83
+ for (int y = 0; y < f[i][j].rows; ++y) {
84
+
85
+ for (int x = 0; x < f[i][j].cols; ++x) {
86
+
87
+ fprintf(fp, x == f[i][j].cols - 1 ? "%f\n" : "%f,", f[i][j].at<float>(y, x));
88
+
89
+ }
90
+
91
+ }
92
+
93
+ }
94
+
95
+ }
96
+
97
+
98
+
99
+ fclose(fp);
100
+
101
+ #else
102
+
103
+ std::cout << cv::format(f[0][0], cv::Formatter::FMT_CSV) << '\n';
104
+
105
+ #endif
106
+
107
+ }
108
+
109
+ ```
110
+
111
+ 作成されたファイルが巨大なので詳細に検証はしていませんが、19200000 行あることは確認できました。