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

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

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

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

1074閲覧

EclipseでJava用のOpenCVを使いたいが上手くいかない

aiueoaiueoaiue

総合スコア94

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2017/10/27 15:06

編集2017/10/28 04:52

##前提・実現したい事
EclipseでJava用のOpenCVが使えるようになっているか確認するためにプログラミングを記述してみたのですがエラーが出てしまい上手くいきませんでした。
##発生している問題・エラーメッセージ
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor, file C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\imgproc\src\color.cpp, line 11048
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\imgproc\src\color.cpp:11048: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor
]
at org.opencv.imgproc.Imgproc.cvtColor_1(Native Method)
at org.opencv.imgproc.Imgproc.cvtColor(Imgproc.java:1854)
at test.imgConv.main(imgConv.java:21)
##該当のソースコード
package test;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class imgConv {
static{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}

public static void main(String[] args) { String path_in = "C:\Users\○○\Desktop\対戦カード.png"; String path_out = "C:\Users\○○\Desktop\対戦カード_gray.png"; Mat mat_src = new Mat(); Mat mat_dst = new Mat(); mat_src = Imgcodecs.imread(path_in); // 入力画像の読み込み Imgproc.cvtColor(mat_src, mat_dst, Imgproc.COLOR_BGR2GRAY); // カラー画像をグレー画像に変換 Imgcodecs.imwrite(path_out, mat_dst); // 出力画像を保存 }

}
##試したこと
エラー文の意味を調べ、試行錯誤してみたのですがダメでした。
##補足情報
参考にしたサイトはhttps://qiita.com/livlea/items/a853c374d6d91b33f5fe
です。

##追記
回答者の方が仰るように変更したソースがこちらです。

package test;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class imgConv {
static{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}

public static void main(String[] args) { String path_in = "C:/7f585617.jpg"; String path_out = "C:/7f585617_gray.jpg"; Mat mat_src = new Mat(); Mat mat_dst = new Mat(); mat_src = Imgcodecs.imread(path_in); // 入力画像の読み込み Imgproc.cvtColor(mat_src, mat_dst, Imgproc.COLOR_BGR2GRAY); // カラー画像をグレー画像に変換 Imgcodecs.imwrite(path_out, mat_dst); // 出力画像を保存 }

}

補足情報にのせたURLのようにグレー画像が出力されませんでした。しかしエラーは何も出ませんでした。これはjpgなのが悪いのかOpenCVが上手く使えていないからなのか、それとも他に理由があるのかわかりません。

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

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

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

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

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

umyu

2017/10/27 17:47

日本語が含まれない英文字だけのファイルパス(ユーザー名とファイル名)にしても問題は発生しますかー?
aiueoaiueoaiue

2017/10/28 04:47

画像を英字だけのものに変更し、Cドライブ直下に落として実行してみるとエラーは出なくなりました。しかし出力画像がどこにも現れないという事態になってしまいました。
umyu

2017/10/28 09:54

UAC(ユーザーアカウント制御 )の関係上、Cドライブ直下にファイルを保存できないのですが、C:\\testOpenCV フォルダを作って実行しても問題は発生しますかー?
aiueoaiueoaiue

2017/10/28 10:00

無事グレー画像が出力されました!ありがとうございます!
umyu

2017/10/28 10:03

解決したらベストアンサーを入れて質問をクローズにしてくださいなー。
KSwordOfHaste

2017/10/28 10:17

勘違いでトンチンカンな回答をしてしまった点、大変失礼しました。>umyuさん、質問者さん
guest

回答1

0

ベストアンサー

訂正:

すみません、イメージファイルのロードに失敗した場合imreadでは例外が発生してくれないことに気づきました。
umyuさんがコメントしておられるように、ファイル名に日本語が入っている場合や、ファイルが存在しない場合も同じエラーになるようです。umyuさんコメントの「ファイル名に日本語が含まれている」というのが正解のように思いました


ソースをちょっと見た程度ですが、このエラーはソースイメージのチャンネル数が3 or 4、即ちカラー画像であるかどうかのチェックにひっかかったように思います。

入力の「対戦カード.png」がグレースケール画像、またはインデックスカラーになっているのではないでしょうか?どちらもチャンネル数が1とかになると思うので上のチェックにひっかかってしまうと思います。

R,G,Bチャネルを持つ画像ファイルを使うとよいと思います。
手ごろなものがなければ参考にしておられるqiitaページにテスト用の画像があるので、それをダウンロードして使ってもよいでしょう。ただしこの画像は元画像と変換後画像の両方を含んでるのでWindows付属の「ペイント」アプリなどで左側のカラー部分のみ切り取っておく方が分かり易いと思います。

投稿2017/10/27 22:40

編集2017/10/27 23:06
KSwordOfHaste

総合スコア18394

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

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

umyu

2017/10/28 11:22

6年前から修正されていない、opencvの不具合なのです。 ◆Unicode Path/Filename for imread and imwrite https://github.com/opencv/opencv/issues/4292 で、imreadの戻り値を無視する方が多いので、実際に問題が発生するのがKSwordOfHasteさんがご指摘を行っている部分になるのです;;
KSwordOfHaste

2017/10/28 11:33

こういう落とし穴があるのですね。今回間違いに気づいて実際にやってみましたが、Matをnewしたばかりの状態のときtoString()で例外が起こるなど、Javaライブラリーの普通の振る舞いとちょっと違うくせがあるように感じました。なにごとも慣れが大事ですね・・・ 補足コメントありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問