質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

1回答

2010閲覧

Processingを用いたCSVファイルからの指定した文字を含む全部の行を取り出すことについて。

trumanime1996

総合スコア12

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2019/01/27 14:32

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
Processingを用いて、画像の中の1ピクセル中の色を抽出して、抽出したR値から
matchRows()を用いて先に格納していたCSVファイルの中から該当した名前を引っ張ってこようとしてるのですがうまく来ません。もしかして、と思いCSVファイル自体読み込めてないのかと思ったのですがif文を用いてprintlnで表示させた時に読み込みはできていました。ソースコードで何が間違えているか教えていただけると助かります。

発生している問題・エラーメッセージ

ソースコードの中にあるピクセル内のRGB値の判定からCSVファイルを照会した際に反応してくれない

該当のソースコード

Processing

1import de.bezier.data.*; 2import processing.video.*; 3PImage img; 4Capture capImg; 5Table tbl = null; 6String fileName = "color.csv"; 7 8 9void setup() { 10 size(640,480); 11 String[] cameras =Capture.list(); 12 13 if (cameras.length == 0) { 14 println("No Cameras"); 15 exit(); 16 17 } 18 19 else { 20 capImg = new Capture(this, cameras[18]); 21 capImg.start(); 22 } 23} 24void draw(){ 25 if (capImg.available()==true){ 26 capImg.read(); 27 image(capImg, 0, 0); 28 29 30} 31} 32 33 void keyPressed(){ 34 switch (key) { 35 case 'i': 36 println("Iキーが押されました。動画を開始させます。"); 37 capImg.start(); 38 break; 39 40 case 'p': 41 println("Pキーが押されました。動画をストップさせます。"); 42 capImg.stop(); 43 break; 44 45 case 's': 46 println("Sキーが押されました。1フレーム分が保存されます。"); 47 saveFrame("capture.png"); 48 break; 49 50 } 51 } 52//クリックしたピクセルのRGB値を表示する。 53 void mousePressed() { 54 img = loadImage("capture.png"); 55 int idx = mouseX + mouseY * img.width; 56 color c = img.pixels[idx]; 57 println( "r = " + red( c ) + ", g = " + green( c ) + 58 ", b = " + blue( c ) ); 59//CSVに格納した色データを読み込む。 60 tbl = loadTable( fileName, "header" ); 61 if( tbl != null){ 62 try{ 63 for(TableRow row : tbl.findRows(" red( c ) ",1)){ 64 String name = row.getString(0); 65 println("色の名前は["+ name +"]です"); 66 } 67 } catch( Exception e ){ 68 69 println("列取り出し異常:" + e.getMessage() ); 70 } 71 } 72 noLoop(); 73 74}

試したこと

floatに置き換えて、matchRows("red( c )",1)のところにred( c )に変数を代入してみたがうまくいきませんでした。
CSVファイルの方はhttp://mslabo.sakura.ne.jp/WordPress/make/processing%E3%80%80逆引きリファレンス/csvデータを取り出すには/
こちらのサイトのコードを使ってみて動作したので大丈夫だと思います。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

一応確認して、全面改版です。

tbl.findRows(" red( c ) ",1)ってのは、まさに" red( c ) "という文字列を探すことになりますから、数字とはマッチしません。
数字との一致を調べたいのですから、数値を文字列に変換してからTable::findRows()に(Javaってクラス表記どうするんだっけ?)渡す必要があります。
しかも、CSVの記述と文字列としての比較になりますから、CSVが整数なら整数、小数点以下があるならその分まで一致させないと検出できません。例えば100と100.0は別物と判断される、ということ。

CSVが整数で書かれているなら例えば
String searchKey=""+(int)red(c);
とか、
String searchKey=Integer.toString((int)red(c));
で整数にしてから文字列に変換したうえで
tbl.findRows(searchKey, 1)
として与えます。

投稿2019/01/27 23:00

編集2019/01/28 14:25
thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

trumanime1996

2019/01/28 06:51

具体的にString key = ""+red( c );はどこに挿入すればいいのでしょうか。
trumanime1996

2019/01/28 07:17

String key;を初期条件と足すと、他のコードと重なってしまうので String bay;としてクリックした場所のピクセルデータを照合した際 bay = String.format("%d",red(c));とした際、コードは動くのですが、赤の値を読み込む際にエラーを発生させてしまい、エラーコードでIllegalFormatConversionException とでてしまいました。
thkana

2019/01/28 14:29

取り急ぎで書いたのでいろいろ間違いもあったので、回答修正しました。 ただ...それくらいは自分でも修正出来るようにしておいたほうがいいと思います。「teratailは技術に興味のある人達が集まって...」とヘルプの冒頭にかかれているサイトですから。
trumanime1996

2019/01/29 01:40

大変失礼いたしました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問