• 締切済み

画像ファイルの編集の方法

画像にはいろんなフォーマットがありますが、ソフトウェアを使うとフォーマット変換ができます。そこで例えばビットマップに変換できたとします(変換には不可逆とか不可逆の圧縮とかありますが、そこはとりあえず不問で)。 そこでプログラムによってビットマップを何らかの方法で数値として取り出し、編集してまた元に戻すことを考えています。これが自在にできると大きな自由度を得ることができます。ビットマップですから平面に展開された数値(RGB値?)だと思います。編集作業が一番難しいのでしょうが、プログラムを駆使して何かができてそれを元に戻すと編集後の画像が再構成されます。このようなことを実行する方法はC++とかJAVAなのかなと思うのですが、実際どのようにして行うことが可能でしょうか。そのようなテンプレートのようなプログラムがあると助かるのですが。画像ファイルのヘッダーなどは形式によって決まっているのではないかと思いますが。なお、できるのであれば形式はビットマップでなくてもいいです。よろしくお願いします。

みんなの回答

  • asciiz
  • ベストアンサー率70% (6630/9393)
回答No.3

>Fortran+Imagemagickの取り合わせは可能なのでしょうか。 Fortran用には、ImageMagickライブラリは無いようですね…。 Pythonならば、PythonMagick という名前でライブラリが作成されているようです。 いっそのこと、Fortranは忘れて、コマンドラインでファイル名指定して画像操作する方が良いように思います。 OSには何を使っているのでしょうか。 unix、linux、mac OS X、Windows、であれば、すぐに利用できる実行ファイルをダウンロードできます。 その他のOSの場合は、ソースからビルドすれば使えるかもしれませんが…。 ところでいったいどんな画像処理をしたかったのでしょうか? 利用環境(OS)には何をお使いで?

skmsk1941093
質問者

お礼

回答ありがとうございます。Windows、Linux(ubuntu)です。Macは全く使いません。 もともとの動機は写真測量に近いようなことです。複数台のカメラで取得した画像から直交座標での位置決めをできるところまでやるということです。技術系とか計測系に応用するということを考えていました。画像処理の本はCを対象としたものが多くあり、CDが付属していたものがありました。その辺をマスターしておけばよかったようには思っています。OpenCVは使いやすいのでしょうか。Cmakeのところでちょっとわからなくなったと感じています。 Fortranは一応何も参照しないでコードを書けるぐらいの自由度はもっています(微妙なところは本を見ますが、日本語でも辞書を引くのと同じです)。C,C++,Javaになるのだろうとは思っていたのですが。

  • asciiz
  • ベストアンサー率70% (6630/9393)
回答No.2

ビットマップファイルは、すでに数字の塊です。 ファイルの頭から、何バイト目と何バイト目はどういう意味を持ち、データ部ではRGBそれぞれの輝度が数値になって各ラインごとにズラッと並んでいる、というような「フォーマット」が決まっています。 ですから、「(*.bmp)ファイルをフォーマットに従って読んで」→「ピクセルデータを加工して」→「ファイルフォーマットに沿って保管」、ということをすれば、画像処理ができることになります。 >Bitmapファイルフォーマット >http://www.umekkii.jp/data/computer/file_format/bitmap.cgi JPEGデータでは、上記のようなものに、「データ圧縮」と「情報のセグメント化」がが追加されています。 Bitmapでは、ヘッダにあるデータのほかは画素データしかありませんが、JPEGファイルには画素以外のデータを保持するブロックを作ることができ、デジカメでは撮影日時や絞り・シャッタースピード等を記録した「EXIFデータ」として活用されたりしています。 >JPEGファイルの構造 >https://hp.vector.co.jp/authors/VA032610/JPEGFormat/StructureOfJPEG.htm JPEGファイルを直接扱おうとすれば、JPEGデータの展開方法までプログラミングしなくてはいけません。 そしてJPEGにはベースラインJPEGとプログレッシブJPEGの違いや、JPEGバージョンによって追加されていった規約などもあり、自分だけでそういった規約に沿ったプログラムを作り上げるのは結構大変です。 また、JPEGよりはGIFの方が簡単かもしれません。 >GIFフォーマットの詳細 >http://www.tohoho-web.com/wwwgif.htm ビットマップデータよりは多少圧縮できますが、色数は最大256色と、ビットマップに劣る部分もあります。 また、データ格納順序を工夫したインターレースGIFで概形を早く表示し始められたり、アニメーションGIFの仕様が決まっていて画像ファイル1つでちょっとした動きを表現できたりもします。 何事も勉強ですから、自分で画像フォーマットを解析して表示するプログラムを書いてみるのは面白いと思います。 ---- ただ、実用的なプログラミングでは、「画像操作ライブラリ」を使うのが一般的です。 その中でもいろんなOS・言語に対応しているのが「ImageMagick」。 →https://imagemagick.org/index.php まあいきなり英文マニュアルを読むのも大変なので、Wikipediaで概要を見たり、日本語解説ページを検索したりして見てください。 >Wikipedia: ImageMagick >https://ja.wikipedia.org/wiki/ImageMagick ImageMagickライブラリを、自分で使う開発言語に取り込むことにより、 ・画像ファイルを指定し、「画像オブジェクト」として読み込む。 ・画像オブジェクトのプロパティから、画像のサイズ・色深度などの情報を読み取る。 ・画像オブジェクトのに対して、画像のサイズを変更する、変形する、特殊効果をかけるなど。その他もろもろの『画像操作』が可能。 ・画像オブジェクトを、任意のファイルフォーマットで保管する。 といったことができます。 ライブラリのおかげで、各画像フォーマットの詳細を知らなくても、マルチフォーマット対応の画像加工プログラムが書けてしまうことになります。 また、ImageMagickパッケージには、コマンドラインツールも含まれていて、ライブラリのインストール後に、OSのコマンドラインから <操作命令> <オプション> <読み込みファイル> <出力ファイル> みたいに実行することでも、簡単な画像加工なら出来てしまいます。 そうすると、C++やJavaみたいにコンパイルが必要な言語でなくとも、OSのバッチファイルでやりたい処理をずらずらと並べて画像加工することも可能です。 >ImageMagickの使い方日本語マニュアルImageMagick) >https://imagemagick.biz/ 上記ページは、コマンドラインツールとしてのImageMagickの使い方解説となります。 ただ、Windows環境で使う場合には少々注意が必要で、Windowsにはファイルシステムの変換をする「convert.exe」っていうプログラムが含まれているんです。 ImageMagickのメインツールである「convert.exe」と名前がかぶるので、C:\Windows\system32\convert.exe を、convertFS(ファイルシステム).exe みたいにリネームしておくのが安全かもしれません。

skmsk1941093
質問者

お礼

懇篤な回答ありがとうございます。大変参考になりました。画像ファイルはbitmap, GIFになるようにしてjpegはひとまず敬遠します。また、自分でプログラムを一から作るよりも画像処理のライブラリにようなもの(ImageMagickなど)を1枚介入させてやることがいいようです。OpenCVなどもそのようなことなのでしょうか。自分が日ごろから操作している言語ですが、Fortranなのです。Fortran+Imagemagickの取り合わせは可能なのでしょうか。あとはPythonとかも少々です。C++はコンパイラがあってHello worldを出力したりはしますが。 画像ファイルAがあって、それを開いて出力して別名で保存して画像Bができる、という流れは人に依存せず正しいプログラムが1つあればいいということになると思います。そして結局は開かれたファイルをどう編集するかが個人個人なのであってその前後(ファイルを開く・保存・閉じる)は標準ツールになっていればいいのではないかと思っているのですが。どうでしょうか。

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

javaは、いくつかの画像ファイルの読み書きをサポートする標準ライブラリがありますし(javax.imageio.ImageIO等を調べて下さい)、 Cもそれらを行うライブラリが色々ありますけど。 最近でメジャーなのはOpenCVとか。

関連するQ&A

  • ビットマップの画像処理について自由度を得る最適方法

    以下、長文かつ具体性に欠ける質問で済みません。画像処理についてやりたいことは決まっているのですが、やり方がわからなくて長年困っています。 【やりたいこと】:ビットマップ形式による写真画像があります。その画像上に例えば、何らかのデータに基づいて線を引いたり、写真画像を数値化して計測したり、自由に加工したりするものです。そのためにはビットマップファイルを自由に操作出来なければなりません。 【これまでにやったこと】 ○Windows VC++ 6.0, Borland C++, Visual Basicなどの勉強 WindowsAPIなど。 ○既成ソフトでの操作(Adobe系,ImageMagik,など) ○科学技術系ソフト(Matlab, Octaveなど) どれも何となくイメージと違うのです。画像ファイルというのはバイナリで、ヘッダ部とデータがあり、(500×500)などの2次元ラスターファイルに過ぎないと私は考えています(色もあるのでさらにそれが何枚かあるのかも知れませんが、基本構造は同じ?)。WindowsAPIなど勉強していると難しいクラスの説明ばかりですが、もっと簡単に処理できるだろうと思っています。画像処理ソフトでは、感覚に頼って見た目に応じてマウスで処理するので正確ではありません。どうしても数値のデータとして処理したいのです。 テキストとして取り出されたビットマップファイル(500×500)の処理はループを回してアレコレ処理すればよい(自由度無限大、だからいろいろあって難しいが)わけですね。要するにビットマップファイルを数値データとして自由に読み書きできるスキルを最も最速で習得するにはどうしたらよいかということなのです。 前提となる画像フォーマットはWindows Bitmapです。そうでないものはペイントショップなどで(質はともかく)変換できるので、その問題はクリアしています。 やはり、WindowsAPIの勉強が不可欠なのでしょうか。 プログラムのスキルとしてはFortranによる科学技術計算プログラムを10年以上作成しています。Fortran95ぐらいだったらポインタなどもあるようなのでビットマップのエディットはひょっとしたら簡単なのかも知れませんが。 以上、長文で失礼します。よろしくお願いします。

  • 画像の編集について教えて下さい

     仕事でスキャナーで取り込んだ画像の編集について困っています。 白黒の書類からビットマップ形式で保存したもの(824×550ピクセルの1328KB位)を透過でかつ画像の質を落とさず100KB位にしたいのですが、いい方法ありませんか?フリーソフトなどで自分なりに調べて試しているのですが、うまくいきません(困)。ほとんど画像の編集・加工をしたことがないのでどうしたらいいか困っています。宜しく御願い致します。何分PCにあまり詳しくないので、説明が足りない点がありましたら教えて下さい!

  • 画像ファイルの圧縮

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

  • 画像の形式を変換するやり方☆

    画像フォーマットをgifなどの形式に変換することってできますか? わたしはスマートフォンを持っていて写真をアプリでデコったりするのですが それをブログなどに貼ろうとすると画像フォーマットの形式が違います とエラーになってしまいます。 なので編集した画像のファイル形式を変換してブログに 貼りたいので何かやり方があれば教えてほしいです。

  • JWCADで画像を取り込み方法等

    ご指導をお願いします。 PDFで届いた平面図に電気配線図を書きたいのですが、どうしたらよいでしょうか? PDFをビットマップ に変換して画像挿入すればよいのでしょうか? 画像の拡大方法はあるのでしょうか? お願いします。

  • 画像フォーマットについて分かりません

    15.一般にDCTを用いた非可逆圧縮方式であるが、可逆圧縮方式にも対応する。自然画像に有効であり、 Webに利用されることが多く、高い圧縮率を実現できる画像形式はなにか。 16.256色までの画像を対象とする画像圧縮フォーマット。複数の画像を1つにまとめてアニメーションとし て表示できたり、画像の一部を透明にして背景に溶け込ませることもできる画像形式はなにか。 17.Webブラウザでの使用を目的に作成された画像圧縮フォーマット。画像の劣化が無いことが大きな特徴 である。透明化のためのアルファチャンネルも割り当てることができる画像形式はなにか。 18.ラスタ型のファイルフォーマットで、Windowsにおける画像の標準フォーマットになっている。 白黒からフルカラーまでの色数を指定でき、圧縮はされない画像形式はなにか。 19.画像ヘッダ部に解像度や色数、圧縮方式を指定して、さまざまな形式の画像を格納できる。異なったプラ ットフォームやアプリケーション間での画像のやり取りをする場合に適している画像形式はなにか。 20.PostScriptのデータにプレビューや使用フォントなどのコメントをカプセル化し、アプリケーションソフト 間でファイルの受け渡しができるようにしたフォーマットの画像形式はなにか。 このような問題を出されたんですが、どれがどの画像形式なのか分からず困っています。 できれば答えを教えていただけると嬉しいのですが、画像形式について分かるサイトでもいいので教えてください。 お願いします。

  • 画像のファイルフォーマットについて

    HDの信号、YPbPrでキャプチャした画像をファイルにおとしたいのですが どのファイルですればいいのかわかりません。 これまでは.bmpや.tgaでRGB変換しておとしていたのですが、 フォーマットがYPbPr4:2:2 10bitだったりするのでRGBに変換したり またそのファイルをYPbPr変換したりしてLoadする場合 計算上、多少の誤差も生じ、正確な値でデータを得られません。 一応.qtifファイルで、とも考えたんですけど、 分かり易いヘッダ情報の資料なども手元になく半分諦めかけています。 もし、.qtifのヘッダ情報を詳しく知っている方、 もしくはYPbPrも対応しているファイルを知っている方、回答をお願いします。 ちなみに対応して欲しいフォーマットは YPbPr4:4:4 8bit + K8bit YPbPr4:2:2 10bit + K8bit YPbPr4:4:4 10bit Kナシ YPbPr4:2:2 10bit Kナシ(6Pixel/4word) YPbPr4:2:2 8bit Kナシ(2Pixel/1word) です。

  • epsファイルの編集--歪ませる

    epsの画像を、斜めに歪ませるように編集したいのですが それが可能な編集ソフトなどありますでしょうか。 文面では説明しづらいのでイメージ図を添付しました。 複数のeps画像(グラフ)を、歪ませてから、重ねてひとつの画像にしたいのです。 tgifをよく使っているのですが、色々試したものの やりたいことの実現方法は分かりませんでした。 ビットマップに変換してしまえば実現できるのですが 出来ることならeps情報をもったまま編集したいと思っています。 いい方法がありましたらお教えください。

  • ビットマップ画像の座標を小数で扱う方法について。

    ビットマップ画像の座標を小数で扱う方法について。 プログラムでビットマップ画像を扱っています。 現在、ビットマップ画像のRGBの値を2次元配列に格納しています。 そのため、例えば画像の白い部分の座標がどこかを知りたいときは、2次元配列の場所を辿り、整数値として座標を得ています。 これを整数値ではなく、少数値で扱うことは可能でしょうか? 配列で扱う以外に方法が思いつかないです;; よろしくお願いします。

  • 画像などのファイル形式の違いをword 変換で編集

    画像などのファイル形式の違いをword 変換編集できますか。 《テキスト形式》 できるとしたらソフト等はどうやって変換するのでしょうか。 教えてください。よろしくお願いします。