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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

6142閲覧

Opencv4.6.0でcvtColorが使えない

saiki1127

総合スコア2

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/06/26 00:28

前提

環境について
macbook pro(M1) monterey
使用言語::C++
バージョン::OpenCV4.6.0

問題

大学の研究で画像を扱うのですが、その時にRGBからHSV色空間へと変えたくてcvtColor関数を使いたいのですがエラーが出てしまいます.
コンパイル自体はできるのですが、プログラムを実行すると下記のようなエラーが出てきます.

code

1#include <iostream> 2#include <string> 3#include <sstream> 4#include <iomanip> 5#include <opencv2/opencv.hpp> 6#include <opencv2/imgcodecs.hpp> 7#include <vector> 8#include <math.h> 9#include <opencv2/core/core.hpp> 10#include <opencv2/highgui/highgui.hpp> 11#include <opencv2/imgproc/imgproc.hpp> 12 13 14int main(){ 15 16 cv::Mat gray,binary,img;//画像格納用 17 cv::Mat hsv,smooth;//HSV色空間格納用 18 img = cv::imread("../img/sample3.png");//画像データの読み込み 19 gray = cv::imread("../img/sample3.png",0);//画像データの読み込み(グレースケール) 20 if(gray.empty()){//エラー処理 21 std::cout<<"error"<<std::endl; 22 return 0; 23 } 24 25 cv::imwrite("../img/gray.png",gray);//グレースケール画像の保存 26 std::cout<<"閾値を入力して下さい"<<std::endl; 27 28 int tsd_v = 135; 29 std::cout<<tsd_v<<std::endl; 30 // std::cin>> tsd_v; 31 32 cv::threshold(gray,binary,tsd_v,255,cv::THRESH_BINARY);//2値化 33 cv::imwrite("../img/binary.png",binary);//2値化画像の保存 34 35 cv::cvtColor(gray,hsv,cv::COLOR_BGR2HSV); 36 37 cv::Size ksize = cv::Size(3, 3); // ここのパラメータは適宜 38 cv::GaussianBlur(binary, smooth, ksize, 0); 39 cv::imwrite("../img/smooth.png",smooth); 40 cv::imshow("frame",smooth); 41 cv::waitKey(0); 42 43 return 0; 44} 45

error

1libc++abi: terminating with uncaught exception of type cv::Exception: OpenCV(4.6.0-dev) /opt/opencv/modules/imgproc/src/color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function 'cv::impl::(anonymous namespace)::CvtHelper<cv::impl::(anonymous namespace)::Set<3, 4, -1>, cv::impl::(anonymous namespace)::Set<3, -1, -1>, cv::impl::(anonymous namespace)::Set<0, 5, -1>, cv::impl::(anonymous namespace)::NONE>::CvtHelper(cv::InputArray, cv::OutputArray, int) [VScn = cv::impl::(anonymous namespace)::Set<3, 4, -1>, VDcn = cv::impl::(anonymous namespace)::Set<3, -1, -1>, VDepth = cv::impl::(anonymous namespace)::Set<0, 5, -1>, sizePolicy = cv::impl::(anonymous namespace)::NONE]' 2> Invalid number of channels in input image: 3> 'VScn::contains(scn)' 4> where 5> 'scn' is 1 6 7zsh: abort ./main

注:ライブラリについてよく分かっておらず、参考にしたページに記述されているインクルード文を継ぎ足しているため、不必要なものもあると思いますが

よろしくお願いします.

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

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

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

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

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

guest

回答1

0

ベストアンサー

grayはグレイスケール画像なんでしょ。 cv::IMREAD_GRAYSCALE = 0で読んでるんだから。
1ch画像なのにbgr2hsvって言われてもね。

投稿2022/06/26 01:14

matukeso

総合スコア1681

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

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

saiki1127

2022/06/26 06:39

なるほど、一度それで試してみます。ただ、勉強のやる気を削ぐような偉そうなあなたの態度はとても不愉快だったので低評価をつけさせていただきます。
fana

2022/06/27 01:48

低評価は「気分」で付ける物ではないよ. (まぁ,このサイトでは,このように理由を明記しているだけでもマシと言える気がするけど) --- で,それはそれとして,こういうときは OpenCVが吐いてくるメッセージをちゃんと読もう. CVが吐いてくるメッセージは「こうなるのが正しいのに」っていうのが出てくることが多いから,それをヒントにすると良い. 今回出てきたメッセージ: > Invalid number of channels in input image: > 'VScn::contains(scn)' > where > 'scn' is 1 で言えば,最後の行がそれにあたる. 「何かが 1であるべき →なのになってない」という文句が出ている. では,「何が」1たるべきなのか? …というのは,今回の場合,直前の文章から「入力画像のCH数」だと推測できる. →そしたら,自分が「入力画像」としている物のCH数を疑うことができるよね.
fana

2022/06/27 01:56

もちろん,このような推理からだけではわからん場合もある. そのときは OpenCV のソースを辿る作業をしてみる. どこかで "Invalid number of channels in input image:" みたいな文字列を吐く実装があるハズだし,「1たるべき」という根拠(判断)の実装も見つけられる可能性が高い.(見てわかるかどうかはともかく,実装としては絶対に存在するハズ)
saiki1127

2022/07/04 10:43

そういう基本的なことがわからない人が質問してることが多数ですよね? それでよくわからない人が解決してもらえるように質問してるわけですから、説教くさい回答はモチベーションが下がるんですよ.確かにあなたの回答は問題解決には役立ちました. 評価の基準が問題解決に役立ったかどうかとあなたが考えているなら確かに低評価は間違っていますね.しかし僕の中での評価基準はもちろん問題解決に役立ったかどうかもありますが回答者の態度も含めていますので
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問