• ベストアンサー

Octaveで画像が読めなくて困ってます。

はじめまして! 家で夏休みの課題でMATLABの演習をやってるいるのですが、 MATLABは学校でしか使えません。だから、無料配布のOctaveを使っています。 いま、Octaveで二次元FIRフィルタで画像を処理したいのですが、imread('ファイル名')で画像が読み込めません。エラーのメッセージはこんな感じです。 error: could not read file: C:/PROGRA~1/GNUOCT~1.36/tmp/oct-610bfb74.0 error: evaluating if command near line 178, column 4 error: called from `imread' in file `/usr/share/octave/2.1.36/m/image/imread.m' error: near line 2 of file `/octave_files/octave13_3.m 処理したい画像ファイルはoctave_filesに入れてやっていいるのですが、 違うところに入れないといけないのか。 あるいはたんにプログラムに問題ありなのか。 わかる方がいればよろしくお願いします。

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

  • ベストアンサー
  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.4

ん?エラーメッセージを見ると、最初に、   error: could not read file: C:/PROGRA~1/GNUOCT~1.36/tmp/oct-610bfb74.0 というのが出てますね。名前からして一時ファイルを作っているのかな? ”C:/PROGRA~1/GNUOCT~1.36/tmp/”というフォルダは存在しますか?存在した場合に、そのフォルダのパーミッションなどは大丈夫(読めるし、ファイルを作れるし、などなど)ですか?

Nyquist
質問者

補足

mikaemiさん回答ありがとございました。 結局Octaveではうまくいかなかったので、学校のMatlabを使ったら、 なんなく読み込めました。 原因はわからなかったです。 けど、詳しい人がたくさんいてくれて助かりました。 うれしいです。 最後にお礼遅れて済みませんでした。 みなさんほんとにありがとうございました。

その他の回答 (3)

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.3

あら。。そうなんですか^^; 実行環境は Windows ですか?エラーメッセージを見ると、Windows のドライブ名があるのに、Unix 形式のスラッシュで区切られたパス名が出てますね。 バックスラッシュ(\)を使う Windows 形式のものと、スラッシュ(/)を使う Unix 形式のもの、両方試してみればいかがでしょう?

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.2

ファイル指定は、ファイル名だけなど、相対パスで書いているのですか? それだと、カレントディレクトリがどこになっているかで違ってきます。 カレントディレクトリがどこであるのかわからなければ、 絶対パスでファイル指定してみてはいかがでしょうか? imread('xxx.jpg') -> imread('/aaa/bbb/ccc/xxx.jpg')

Nyquist
質問者

補足

回答ありがとうございます。 絶対パスでもやってみたけど、だめでした。 カレントディレクトリは、/octave_filesです。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

超ヤマカンで。 Octave を C:\Program Files\ 以下にインストールしたが、octave がスペースの含まれたパスをうまくハンドリングできていないとか?

Nyquist
質問者

補足

回答ありがとうございます。 はい、Octave を C:\Program Files\ 以下にインストールしました。 >スペースの含まれたパスをうまくハンドリングできていない ファイル名にスペースが含まれているから認識できないってことでしょうか? ファイル名にスペースは使わないようにしているのですが。。

関連するQ&A

  • Octaveで画像が読み込めない(imread)

    Octaveで画像読み込みコマンド img = imread('IMG_0614.jpg'); と打つと, error: imread: invalid image file: /usr/local/Cellar/octave/3.8.1_1/lib/octave/3.8.1/oct/x86_64-apple-darwin14.1.0/__magick_read__.oct: failed to load: dlopen(/usr/local/Cellar/octave/3.8.1_1/lib/octave/3.8.1/oct/x86_64-apple-darwin14.1.0/__magick_read__.oct, 2): Library not loaded: /usr/local/lib/libGraphicsMagick++.3.dylib Referenced from: /usr/local/Cellar/octave/3.8.1_1/lib/octave/3.8.1/oct/x86_64-apple-darwin14.1.0/__magick_read__.oct Reason: image not found error: called from: error: /usr/local/Cellar/octave/3.8.1_1/share/octave/3.8.1/m/image/private/__imread__.m at line 181, column 7 error: /usr/local/Cellar/octave/3.8.1_1/share/octave/3.8.1/m/image/private/imageIO.m at line 66, column 26 error: /usr/local/Cellar/octave/3.8.1_1/share/octave/3.8.1/m/image/imread.m at line 107, column 30 というエラーが出て,画像を読み込めません。 コマンドは,ファイル'IMG_0614.jpg'のあるディレクトリで実行しています。 少し調べてみて,「imageパッケージがインストールされていない」のかもしれないと思い, pkg install -forge image と打ちましたが, error: the following dependencies were unsatisfied: image needs octave >= 4.0.0 と,Octaveのバージョン4.0.0が必要と出てきました。 そこで,Octaveのダウンロードサイト http://wiki.octave.org/Octave_for_MacOS_X を見ましたが,3.8が最新バージョンみたいで,4.0はありませんでした。 とにかく困っています。 Octave で imread を使うにはどうしたらいいのか, 何か良い方法があれば,教えてください! よろしくお願いしますm(_ _)m ちなみに環境は,Mac OS X Yosemite 10.10.2です。

  • Octaveでlibsvmを使った画像認識をしたい

    題のとおり,Octaveでlibsvm(識別器ライブラリの一種)を使った画像認識をしようと考えています。ところが,,, libsvmは使えるのですが,画像を読み込むimread()関数が使えません。 具体的には,以下のエラーがでます。 octave:2> test_image error: default_formats: /usr/local/octave/3.8.2/lib/octave/3.8.2/oct/x86_64-apple-darwin13.4.0/__magick_read__.oct: failed to load: dlopen(/usr/local/octave/3.8.2/lib/octave/3.8.2/oct/x86_64-apple-darwin13.4.0/__magick_read__.oct, 2): Symbol not found: __ZN6Magick5ColorC1Ejjj Referenced from: /usr/local/octave/3.8.2/lib/octave/3.8.2/oct/x86_64-apple-darwin13.4.0/__magick_read__.oct Expected in: /usr/local/octave/3.8.2/lib/libGraphicsMagick++.3.dylib in /usr/local/octave/3.8.2/lib/octave/3.8.2/oct/x86_64-apple-darwin13.4.0/__magick_read__.oct error: called from: error: /usr/local/octave/3.8.2/share/octave/3.8.2/m/image/imformats.m at line 255, column 11 error: /usr/local/octave/3.8.2/share/octave/3.8.2/m/image/imformats.m at line 78, column 3 error: /usr/local/octave/3.8.2/share/octave/3.8.2/m/image/private/imageIO.m at line 60, column 7 error: /usr/local/octave/3.8.2/share/octave/3.8.2/m/image/imread.m at line 107, column 30 error: /Users/hajime/Desktop/image_2/test_image.m at line 12, column 4 octave:2> 環境は, ・Mac OS X Yosemite 10.10.2 ・Octave 3.8.2 (http://sourceforge.net/projects/octave/files/Octave%20MacOSX%20Binary/test/2014-09-25-Binary-of-GNU-Octave-3.8.2-for-OSX-10.9.5/より入手) ・libsvm 3.20 (http://www.csie.ntu.edu.tw/~cjlin/libsvm/より入手) です。 試しに,古いバージョンのOctaveを入れてみたところ, ・Octave 3.8.0 (http://sourceforge.net/projects/octave/files/Octave%20MacOSX%20Binary/2013-12-30%20binary%20installer%20of%20Octave%203.8.0%20for%20OSX%2010.9.1%20%28beta%29/より入手) 画像を読み込むimread()関数は使えるようになりましたが, libsvmが使えなくなってしまいました。(一つの.mファイルを別々のOctaveで使い分けることができれば解決するのかもしれませんが,ややこしいことになりそうなので考えていません。) Octaveのバージョンアップによって,imread()関数が使えなくなるような変更があったと思うのですが,それが何なのか,どうやって直すのかが分かりません。 どこに問題がありそうでしょうか? かなり手こずっています,どうかお助けくださいm(><)m

  • matlabとoctaveの共通性について

    いわゆるmatlabクローンのoctaveですが、どの程度の互換性・共通性があるでしょうか。 スクリプトファイルで作業する場合、保存したファイル名が両方とも拡張子がmとなっています。つまり、両ソフトがインストールされている場合、octaveで作成したmファイルをクリックするとmatlabが起動する(その逆も)ということだと思います。 ワードやエクセルのクローンでも拡張子の区別があったと思います。拡張子が同じというのはクローン側が相当自信あり、ということなのかなと思いますが。 どうでしょうか。

  • Octave画像ファイルの向きを上下逆さまにしたい

    % lec5_2.m % bmp画像出力(画像*****のプログラム) % % Input.bmp : 処理したい画像(モノクロ)BMPファイル % Output.bmp : 処理したい画像(モノクロ)BMPファイル clear all, close all % おまじない Iin=imread('LENNA.bmp'); % 画像の入力 figure, imshow(Iin) % 画像表示 [y_size,x_size]=size(Iin); %縦横のサイズ % 配布資料を参考にして以下の2重for文の % 中のプログラムを完成させよ for n=3:y_size for m=3:x_size n2=y_size-n+1; Iout(n,m)=Iin(n2,m); end end % プログラム修正ここまで figure, imshow(Iout) % 画像表示 bmpwrite_bk(Iout,'LENNA.bmp','Output.bmp'); % End of file 上記はOctaveのmファイルの中身ですが、これを使用すると画像の上下を反転させることができます。 これを、『画像を上下逆さまに回転』させ、元の画像を下向きにして表示させたいです。それをするには二重for文の内容を変えるみたいなのですが、どう変えればいいかわからず途方に暮れています。 二重for文の内容をどう変えたら成功するのでしょうか。 mファイルをどう弄ったらいいかもわからない初心者の質問です。よろしくお願いします。

  • MATLABで画像のヒストグラムを表示させようとしています。

    MATLABで画像のヒストグラムを表示させようとしています。 >> I=imread('img.tif'); >> imhist(I) ??? Undefined function or method 'imhist' for input arguments of type 'uint8'. というエラーが返ってくるのですが、どうしたらいいのでしょうか? >>

  • octaveのコンパイルオプション

    MATLABのクローンのoctaveを, C++のライブラリとして利用したいと考えているのですが, コンパイルが上手くいきません. プログラムは以下のような単純なものです. --------- begin of hello.cpp ------------------ #include<iostream> #include<octave/config.h> #include<octave/Matrix.h> int main(){ Matrix m(2,2,1.0); cout<<"hello octave !"<<m; return 0; } --------- end of hello.cpp -------------------- 次のようなコンパイルオプションでコンパイルしています. > g++ -I/usr/include/octave-2.1.35/ -L/usr/lib/octave-2.1.35 \ -loctave -lcruft -loctinterp -lreadline -lcurses -llapack \ -lblas -ldl -lg2c -L/home/pippin/name/.redhat/SOURCES/octave-2.1.35/kpathsea \ -lkpathsea hello.cpp すると,次のようなエラーメッセージを返されます. /tmp/ccuvk2IV.o: In function `main': /tmp/ccuvk2IV.o(/text+0x2c): multiple definition of `main' /usr/lib/gcc-lib/i386-redhat-linux/2.96/libg2c.a(main.o)(.text+0x0): first definition here /usr/bin/ld: Warning: size of symbol `main' changed from 58 to 174 in /tmp/ccuvk2IV.o collect2: ld returned 1 exit status エラーメッセージから解するに,libg2c.aでもmain関数が定義されているため, hello.cppのmain関数とかぶるという様な事だと思うんですが,ライブラリに main関数が定義されているというのも変な話です. ちなみに,コンパイルした環境は, OS: redhat linux 7.3 octave version 2.1.35 gcc version 2.96 このタイプのエラーを回避する方法を知っておられる方は, 回答の方よろしくお願いします.

  • MATLABのGUIDEでフォルダ内の画像ファイルを表示する方法。

    MATLABのGUIDEでフォルダ内の画像ファイルを表示する方法。 MATLABのGUIDE内であらかじめボタンやパネルなどを配置するときに 背景色の変更のように背景に画像を設定することはできないのでしょうか? できなければmファイル内でのプログラミングでもいいので 画像ファイルを読み込んでGUIで背景表示させる方法を教えてください。

  • C言語→MATLABへの変換で、困っています。

    学生研究でMATLABを使用しています。 光学測定系で画像を取り込み、それを解析する実験を行っています。 MATLABはプログラム内の値の変更や処理の追加できることから 大変助かっています。 そこで、もともとはC言語でやっていた3種類の処理を 一つのMファイルで行いたいと思い。 只今、C→MATLAB変換するプログラムの書き直しを行っています。 そのうち2種のプログラムは行列の計算がメインだったため何とか Mファイルに書き直すことができたのですが、 最後のひとつが難しい関数らしきものが多く、 MATLABに書き直すことができるプログラムなのかもわからない状態です。 そこで、 ・C→MATLAB変換可能なプログラムか? ・書き直すにあたってどこを部分を直せばよいのか? をアドバイスいただけないでしょうか? ↓MATLAB化したいC言語ファイル http://karispace.web.fc2.com/cmat2.c 一枚のbmp画像から4枚のdatデータを出力するプログラムです。 C言語とMATLABの三ヶ月前に勉強して、使用しており、基礎がわかる程度です。 よろしくお願いします。

  • MATLABのDICOM画像表示

    いつもお世話になっております。 現在、MATLABでDICOM画像を扱って画像処理を行おうとしているのですが、MATLABでDICOM画像(unit16)を表示 A = dicomread('ファイル名.dcm'); imshow(A,[]); させた画像がImageJやDICOMviewerで表示させた画像と比べて暗く(階調数が多く)感じられ、原画像を表示することができません。 unit16に問題があると思い、unit8に変換しましたが、画像は暗い画像で、かつ、同じピクセル値に線が入った画像となってしまいました。 どうすれば原画像を表示させることができるのでしょうか? アドバイスよろしくお願いします。

  • Octaveのprintコマンドについて

    質問を拝見いただき、ありがとうございます。 掲題の件につきまして、質問があります。  先に私のoctave環境について記載いたします。 [環境]  octave version 3.4.3  mingw i686コンパイル  gnuplotでのplot  setenv(’GNUTERM’,’windows’)  CPU dual2core メモリ4GB [質問内容]  plotした画像を出力するために  printコマンドを使用しております。    print -djpg filename.jpg  その際、データ点数が1000点数などのような小規模での  print出力では数秒でjpgファイルを出力しますが、  データ点数が数万のような規模をplotする場合、  数分かかります。  print関数で呼び出しているgcwin32c.exeが、CPU使用率50%を  示し、数分かかるという処理の遅さのためよい解決方法を  探しております。  JPGSAVEや、ImageMagickといったOctaveに組み込めそうなのは  見つけましたが、浅学のため組み込み方もわかりません。  上記の解決方法について、上記のようなライブラリ?ソフト?を   Octave pacageで組み込める(pkg listののち、pkg load)まで  できる方法などを、詳細にお教えいただけますと幸いです。  よろしくお願いします。