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

回答編集履歴

1

追記

2016/03/04 09:44

投稿

Chironian
Chironian

スコア23274

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