• ベストアンサー

圧縮について

私は今画像の勉強をしており、bmp画像をスキャンし画像のデータを文字になおし例えば(255255255255・・・)の用に出力されそれをbzip2を使い圧縮したものとbmp 画像をただ単にbzip2で圧縮したものを比べるとサイズが絵によって違います。なぜなのか教えてください。画像は白黒でR=G=Bです。私としては黒の割合が多いとRGB値は255なのでサイズが大きくなってしまう(白だとRGB値が0)なので。だからそれによって変わってしまうと思ったのですが・・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

圧縮というのはそーゆーものです。 端的に言うと、圧縮は 「ここは555555555となっているから『5が10個』と書き換えた方が短くなるな。 ここは22222222となっているから『2が8個』と書き換えよう…」 というようなせせこましい作業を自動で行っているのです。 (圧縮技術にはこれ以外にもいろいろな手法があります。参考書を見てください) 同じデータが並ぶものでは、圧縮率は高くなります。 それが白一色でも黒一色でもあまりかわりありません。 色が急激に変わるようなものでは圧縮率は低くなります。 いちばん圧縮しにくいのはまったくランダムなノイズ画像です。 質問の場合、1回文字に直しているというので、 それによる影響はあると思いますが、 それでも、「いろいろな色がある」より「黒一色」の方が データの変動が少ないので圧縮率が高くなると考えられます。

関連するQ&A

  • BMP画像ファイルの読み書き

    Visual StudioのC言語により、ビットマップ形式の画像に対するプログラミングで 簡単な背景差分のプログラムを作成しています。 背景画像と対象画像2枚を読み込み色の差を取り、 差の値が背景の値と近ければ背景とみなし白で塗りつぶし、 物体だけを表示した画像を生成するようなプログラムです。 1枚のみの画像は以下のプログラムで作動しますが、連続した画像(01.bmp 02.bmp ・・・・100.bmp) を読み込み上記の処理をする場合にはどうすればよいのでしょうか? 分かりにくくて申し訳ないですが、よろしくお願いします。 #include "BMPData.h" #include <math.h> int main(){ int a=150; int i,j; int r,g,b; int ir,ig,ib; int diff; BMPStruct bmp_bg; BMPStruct bmp_oj; BMPStruct bmp; RGB rgb_bg; RGB rgb_oj; RGB rgb; RGB rgb_w; rgb.r = 255; rgb.g = 255; rgb.b = 255; rgb_w.r = 0; rgb_w.g = 0; rgb_w.b = 0; readBMP(&bmp_bg, "back.bmp"); //背景画像の読み込み readBMP(&bmp_oj, "01.bmp"); //対象画像の読み込み makeBMP(&bmp,640, 480, rgb); //出力用画像を生成する for(i=0; i<640; i++){ for(j=0; j<480; j++){ getColor(bmp_bg, &rgb_bg,i,j);  //背景画像の色を取得 getColor(bmp_oj, &rgb_oj,i,j);  //対象画像の色を取得 //rgbそれぞれの値の差 r = rgb_bg.r - rgb_oj.r; g = rgb_bg.g - rgb_oj.g; b = rgb_bg.b - rgb_oj.b; //絶対値 ir = abs(r); ig = abs(g); ib = abs(b); //色の差 diff = ir + ig + ib; //背景かどうかの判定 if(diff>a){ putColor(bmp, rgb_w, i, j); //色の差が大きければ出力画像に対象画像の色をそのまま出力 } else{ putColor(bmp, rgb, i, j); //色の差が小さければ白を出力 } } } writeBMP(bmp, "image01.bmp"); }

  • 画像の白と黒のドットを数えたい

    例えば白と黒だけで描かれたビットマップ画像を用意し(白黒であればbmpでなくてもどんな形式でも良い)、縦のラインで白は幾つあるか、黒は幾つあるかを画像全体に関して求めるにはどうすればいいでしょうか。 例えばWindowsのペイントでペンツールだけで適当に絵を描いた大きさ640×384のビットマップ画像の場合、ある縦のラインでは白は120、黒は264あり、その隣の縦のラインでは白は124、黒は260あり、、、とこれを640回繰り返して画像の縦のラインでの白値と黒値の値を順次求めていってくれるような機能のあるソフトはあるでしょうか。 それともやはりC言語等のプログラミングで求めていくしかないでしょうか。 画像処理に詳しい方お願いします。

  • 画像のRGBの値

    画像フィルタが必要になり、そのために画像の性質を知るために、画像のRGBの値を直接求めようと思いました。 具体的には、画像ファイル(BMP)があり、その画像の全画素のRGBの値をテキストファイル(CSV形式)に変換したいのです。そのようなツールありますか? 特殊な用途なので、 while(getpixel(r,g,b)) { printf("%d,%d,%d\n",*r,*g,*b); } のようなプログラムを書かないといけないと思うのですが、「BMPファイルの先頭から順番に画素のRGBの値を持ってくる関数getpixel」が書けません。

  • ピクセルの値から画像

    画像をRGB値の値で表す1次元配列を作ったのですが、それを今度は逆のことをしたいのですがよくわかりません。アドバイスお願いします。画像は白黒でR=G=Bです。

  • PHOTOSHOP6.0にてRGB毎に画像を作る方法について

    質問タイトルについて、具体的にどういうことがしたいのかといいますと、 例えば、Rのデータには鳥の絵(画像サイズ64*64モノカラーグレースケール)、Gのデータには牛の絵(画像サイズ64*64モノカラーグレースケール)、Bのデータには豚の絵(画像サイズ64*64モノカラーグレースケール)があるとします。 これらを合体させて1枚の64*64RGBカラーというビットマップ画像を作りたいのですが、可能でしょうか?(赤い鳥と青い牛と緑の豚が重なってみえる絵です) 普通こんなことはしないと思いますが、やりかたを知っている方があれば教えて頂きたく思います。 何卒よろしくお願い致します。

  • ファイルの圧縮と画像の関係なんですが

    いつもお世話になります。 ファイルを長期保存するとき、PDFとDocuworksに変換したり、LhaplusやZipに圧縮したりしています。 そこで疑問なんですが、 一つ目:PDFとDocuworksに変換したとき、元のWordやExcelの内容(主に画像が貼って有るか無いかだと思うんですが)によって、圧縮(ファイルサイズが減ったり)されたり、ファイル容量が増えたりするんです、何故ですか? 二つ目:その元ファイル(WordやExcel)に画像を貼るとき、コピーして貼るのと、図の挿入で張るのとでは、またまたファイルサイズが全然違います、何故ですか。 三つ目:元ファイルをLhaplusやZipで圧縮したとき、結構圧縮率が高かったり、全然圧縮されない(ひどいとファイルサイズが増えたり)時とかあります、なぜですか? 画像ファイルも、jpegやBMPやtiffでgifなど有名なやつで試してみたんですが、どうも良くわかりません。 WordとExcel、jpegやBMPやtiffでgif、PDFとDocuworks、ZipとLhaplusの組み合わせで色々試してみたんですが、 どう元データを作れば、PDFやDocuworksで一番ファイルサイズが減るのか? どう元データをつくれば、ZipやLhaplusで一番圧縮されるのか? どなたか、詳しい方、教えてください。 出来れば、理屈も分かるといいんですが、、、 面倒な質問ですみませんが、よろしく御願いします。

  • aviの可逆圧縮について教えてください

    AviUtlを使って、30分で67GBの動画サイズを小さくしようとしました。 使った圧縮プログラムは「UtVideo YUV422 BT.709 VCM」です。 ファイル→AVI出力→ビデオ圧縮でプログラムを選択して保存したのですが、小さくなるどころか逆に106GBまで大きくなってしまいました。 今度は設定を変えて「UtVideo RGB VCM」でやってみたら、170GBになってしまいました。 いったいどうしてこうなってしまうのでしょうか? 解決策を教えてください。 ちなみに、圧縮した動画はAdobe Premiere Elements 11で編集するつもりです。

  • 画像ファイルの圧縮

    あるテキストで、 ....上記で、BMP以外の形式はデータ容量を小さくするために圧縮ができる形式であり、そのうち、Tiff GIF PNG は一度圧縮しても元に戻すことができる可逆圧縮方式ですが、JPEGは一度圧縮すると元に度せない、非可逆圧縮方式です。 ---------------------- という説明がありました。 ここでの圧縮というのは、zipなどのことを言っているのではないと思うのですが、そうすると、 画像処理ソフトで、そのファイルを開き、保存(変換)する際に、何段階か、品質と、容量のサイズの小ささのトレードオフで、選べたりすると思います。 可逆というのは、その際に、サイズを例えば小さくして保存して、またあとで開きなおして高品質な容量の大きなファイルにすることもできる、といったことを意味しているのでしょうか。それはそれで信じにくいのですが。

  • 圧縮しても小さくなりません

    カメラで初めて動画を撮ってみました。 友達にデータを渡そうと思ったら サイズは1.06G これではCD-Rにはとうてい入れられないと (DVD-Rは使えません) 初めて圧縮をすることにしました。 調べたらデータを右クリック、送る、zipで 圧縮できると知ったので その通りにやったのですが 出来たzipフォルダは1.05G ほとんど小さくなってません。 何かやり方を間違えているでしょうか? 今回のことだけではなく こんな風に動画を撮ってしまうと SDカードに入れっぱなしにもしておけないし パソコンに入れたら段々溜まって サイズが大きすぎて困ってしまいます。 なんとか外に出したいです。 動画はDVDでもないとむりですか? パソコンにはついてませんが(ROMのみ) DVDプレイヤー(ディガー)を持っています。 が、「ビデオカメラで撮影したMPEG2の動画を・・・」と 書かれており カメラで撮った動画はQuick Time Motion JPEG 扱えないようです・・・ この場合何かで変更可能なのでしょうか? 動画のデータの種類には詳しくなく良くわかりません。

  • GT-X970で「出力サイズを下げてください・・」

    GT-X970で順調に昔の35mm白黒フィルムのスキャンを進めてきましたが、6×6サイズのスキャンで困っています。 35mmでは解像度3200dpiでスキャンしていましたが、6×6では1200dpiまで下げないとスキャンできません。 具体的には「出力サイズを下げてください。画像が大きすぎて取り込み出来ません・・・・」というようなダイアログが出ます。 せめて2400dpiでスキャンしたいのですが、設定等で可能でしょうか?

専門家に質問してみよう