質問編集履歴

1 タイトルの改善

shutein

shutein score 14

2017/11/08 18:58  投稿

OpenCVを使って画素を調べる方法
OpenCVを使って画素情報を調べる方法
###前提・実現したいこと
androidstudioとopenCVを使って、
カメラで撮影している物から赤色のみを抽出するアプリを開発しています。
現在、色を抽出した白と黒の画像から画面全体の画素を調べて
連続する白色の領域のみを数えようと考えています。
###発生している問題・エラーメッセージ
画素を調べる際に
HSV形式から画素の情報を調べる方法はあるのでしょうか。
私が調べた限りだと、RGBから調べているものが多く
もしかしたらHSVからRGBに変換しなくては出来ないのでしょうか。
参考までにこちらが色抽出する部分のコードです。
```java
private Mat m_temp; //抽出結果の画像
public Mat onCameraFrame(Mat inputFrame) {
Mat src = inputFrame;
Mat dst = Mat.zeros(inputFrame.width(), inputFrame.height(), CV_8U);
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2HSV);
Mat src2 = dst;
Mat dst2 = Mat.zeros(inputFrame.width(), inputFrame.height(), CV_8U);
Scalar low = new Scalar(165, 20, 30);//下限 
Scalar high = new Scalar(179, 255, 255);//上限
Core.inRange(src2, low, high, dst2);//色抽出
return dst2; }}
```
###試したこと
保存した結果画像「m_temp」を
Imgproc.cvtColor(m_temp,m_temp,Imgproc.COLOR_HSV2RGB)
でRGBに変換しようと試してみるとこのようなエラーが出てしまいました。
###エラーメッセージ
```
1-08 18:42:30.868 15086-15154/com.example.janome.color2 E/cv::error(): OpenCV Error: Assertion failed (scn == 3 && (dcn == 3 || dcn == 4) && (depth == CV_8U || depth == CV_32F)) in void cv::cvtColor(cv::InputArray, cv::OutputArray, int, int), file /build/master_pack-android/opencv/modules/imgproc/src/color.cpp, line 9825
11-08 18:42:30.869 15086-15154/com.example.janome.color2 E/org.opencv.imgproc: imgproc::cvtColor_11() caught cv::Exception: /build/master_pack-android/opencv/modules/imgproc/src/color.cpp:9825: error: (-215) scn == 3 && (dcn == 3 || dcn == 4) && (depth == CV_8U || depth == CV_32F) in function void cv::cvtColor(cv::InputArray, cv::OutputArray, int, int)
11-08 18:42:30.870 15086-15154/com.example.janome.color2 E/AndroidRuntime: FATAL EXCEPTION: Thread-3
Process: com.example.janome.color2, PID: 15086
CvException [org.opencv.core.CvException: cv::Exception: /build/master_pack-android/opencv/modules/imgproc/src/color.cpp:9825: error: (-215) scn == 3 && (dcn == 3 || dcn == 4) && (depth == CV_8U || depth == CV_32F) in function void cv::cvtColor(cv::InputArray, cv::OutputArray, int, int)
]
at org.opencv.imgproc.Imgproc.cvtColor_1(Native Method)
at org.opencv.imgproc.Imgproc.cvtColor(Imgproc.java:1778)
at com.example.janome.color2.MainActivity.onCameraFrame(MainActivity.java:155)
at org.opencv.android.CameraBridgeViewBase$CvCameraViewListenerAdapter.onCameraFrame(CameraBridgeViewBase.java:163)
at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:399)
at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:352)
at java.lang.Thread.run(Thread.java:776)
```
###補足情報(言語/FW/ツール等のバージョンなど)
androidstudio 2.3.1
java
OpenCV 3.0.0
  • Java

    25072 questions

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

  • Android

    10537 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • OpenCV

    3259 questions

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

  • Android Studio

    6784 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る