質問編集履歴

1

ソースコードを記載しました

2019/01/23 02:57

投稿

QQQP
QQQP

スコア15

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,131 @@
1
1
  動画処理の勉強をしています。動画の反転はできたのですが、そこの反転させる関数をグレースケールにする関数にすると、保存された動画ファイルを見ることができません。
2
2
 
3
- 環境はopencv4.0.0,windouws10,Visualstudio2017です。
3
+ 環境はopencv4.0.0,windouws10,Visualstudio2017,C++です。
4
4
 
5
5
  これができないと前へ進めず困っています。
6
6
 
7
7
  どなたかご返答よろしくお願いします。
8
+
9
+
10
+
11
+ 補足 すいませんソースコード貼るの完全に忘れていました。
12
+
13
+
14
+
15
+ #include <opencv2/opencv.hpp>
16
+
17
+
18
+
19
+ int main(void)
20
+
21
+ {
22
+
23
+ // 動画ファイルを取り込むためのオブジェクトを宣言する
24
+
25
+ cv::VideoCapture cap;
26
+
27
+ cap.open("C:/opencv/sources/samples/data/Megamind.avi");
28
+
29
+
30
+
31
+ // 動画ファイルが開けたか調べる
32
+
33
+ if (cap.isOpened() == false) {
34
+
35
+ printf("ファイルが開けません。\n");
36
+
37
+ return -1;
38
+
39
+ }
40
+
41
+
42
+
43
+ // 作成する動画ファイルの諸設定
44
+
45
+ int fourcc, width, height;
46
+
47
+ double fps;
48
+
49
+
50
+
51
+ width = (int)cap.get(cv::CAP_PROP_FRAME_WIDTH); // フレーム横幅を取得
52
+
53
+ height = (int)cap.get(cv::CAP_PROP_FRAME_HEIGHT); // フレーム縦幅を取得
54
+
55
+ fps = cap.get(cv::CAP_PROP_FPS); // フレームレートを取得
56
+
57
+ fourcc = cv::VideoWriter::fourcc('X', 'V', 'I', 'D'); // AVI形式を指定
58
+
59
+ // * エンコード形式 "XVID" = AVI, "MP4V" = MPEG4, "WMV1" = WMV
60
+
61
+
62
+
63
+ // 動画ファイルを書き出すためのオブジェクトを宣言する
64
+
65
+ cv::VideoWriter writer;
66
+
67
+ writer.open("ビデオ.avi", fourcc, fps, cv::Size(width, height));
68
+
69
+
70
+
71
+ // 画像を格納するオブジェクトを宣言する
72
+
73
+ cv::Mat frame, dst;
74
+
75
+
76
+
77
+ for (;;) {
78
+
79
+ // 1フレームを取り込む
80
+
81
+ cap >> frame; // cap から frame へ
82
+
83
+
84
+
85
+ // 画像から空のとき、無限ループを抜ける
86
+
87
+ if (frame.empty() == true) {
88
+
89
+ break;
90
+
91
+ }
92
+
93
+
94
+
95
+ // ウィンドウに画像を表示する
96
+
97
+ cv::imshow("変換中", frame);
98
+
99
+
100
+
101
+ //ここにグレースケールの関数を入れると保存されたファイルが再生できない。※1
102
+
103
+
104
+
105
+ // 動画ファイルへ書き出す
106
+
107
+ writer << dst; // dst から writer へ
108
+
109
+
110
+
111
+ // 1ms待つ
112
+
113
+ cv::waitKey(1);
114
+
115
+ }
116
+
117
+
118
+
119
+ return 0;
120
+
121
+ }
122
+
123
+
124
+
125
+ これがソースコードです。
126
+
127
+ 今は書いていませんが、グレースケールにするときは※1のところにcvtColor(frame, gray_frame, cv::COLOR_BGR2GRAY);を書き込んでいます。
128
+
129
+ もちろんその時はgray_frameを宣言もしています。
130
+
131
+ どなたか詳しい方よろしくお願いします。