回答編集履歴

1

追記

2016/03/04 09:44

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -3,3 +3,59 @@
3
3
 
4
4
 
5
5
  記述ミスかも知れませんが、生画像をデコードできないですよ。生画像をエンコードしてjpegやpngへ変換します。jpegやpngをデコードして生画像を出来るだけ回復します。
6
+
7
+
8
+
9
+ ---
10
+
11
+ 【追記】
12
+
13
+ > そのjpgをデコードして生画像をエンコード前と同じbyte配列数で復元したいのですが無理ですかね?
14
+
15
+
16
+
17
+ 私はimencode, imdecodeを使ったことはないのでずか、復元する画像のサイズやピクセル情報のバイト数を元の画像と同じになるよう指定すればできる筈ですよ。
18
+
19
+
20
+
21
+ [ここ](http://opencv.jp/opencv2-x-samples/imencode_imdecode)にサンプルがありました。
22
+
23
+ jpegに変換して戻す部分は下記ですね。
24
+
25
+ ```C++
26
+
27
+ Mat src = imread("lenna.png");
28
+
29
+
30
+
31
+ //(1) jpeg compression
32
+
33
+ vector<uchar> buff;//buffer for coding
34
+
35
+ vector<int> param = vector<int>(2);
36
+
37
+ param[0]=CV_IMWRITE_JPEG_QUALITY;
38
+
39
+ param[1]=95;//default(95) 0-100
40
+
41
+
42
+
43
+ imencode(".jpg",src,buff,param);
44
+
45
+ cout<<"coded file size(jpg)"<<buff.size()<<endl;//fit buff size automatically.
46
+
47
+ Mat jpegimage = imdecode(Mat(buff),CV_LOAD_IMAGE_COLOR);
48
+
49
+ ```
50
+
51
+
52
+
53
+ このsrcとjpegimageの画像サイズや色深度が異なってしまうと言うことでしょうか?
54
+
55
+
56
+
57
+ サンプルを見る限り画像サイズの指定はないようですね。
58
+
59
+ ピクセル情報のバイト数は、CV_LOAD_IMAGE_COLORの部分で指定するようです。
60
+
61
+ imread()と同じ指定をすれば同じに出来るはずです。imread()でのデフォルトはCV_LOAD_IMAGE_COLORです。