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

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

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

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

C++

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

Q&A

解決済

1回答

845閲覧

swift内部で構造体を戻り値とするときのエラー

chestnutforest

総合スコア9

OpenCV

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

C++

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

0グッド

0クリップ

投稿2020/04/04 03:50

質問
swift内部の処理を簡潔にするために構造体の生成部分を関数にしたときにエラーが起きます。
今回はopenCVラップしてを用いてます。

表示されるエラー

libc++abi.dylib: terminating with uncaught exception of type cv::Exception: OpenCV(4.2.0) /Volumes/build-storage/build/master_iOS-mac/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<1, -1, -1>, cv::impl::(anonymous namespace)::Set<0, 2, 5>, 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<1, -1, -1>, VDepth = cv::impl::(anonymous namespace)::Set<0, 2, 5>, sizePolicy = cv::impl::(anonymous namespace)::NONE]' > Invalid number of channels in input image: > 'VScn::contains(scn)' > where > 'scn' is 1

具体的にやった事
以下のコードで構造体を生成するまでの部分を関数にしてしまおうと考えました。
入力画像に対してグレースケール化した時のヒストグラム(構造体)を生成するだけの関数です。
これを呼び出して動かしても問題ありません。
openCVWrapper.mm

C++

1+(void) makeHistgramFromImage:(UIImage *)image 2{ 3 // transform UIImagge to cv::Mat 4 // transform the cv::Mat color image to gray 5 cv::Mat imageMat; 6 UIImageToMat(image, imageMat); 7 cv::Mat grayMat; 8 cv::cvtColor (imageMat, grayMat, CV_BGR2GRAY); 9 image = MatToUIImage(grayMat); 10 // 画像の読み込み 11 IplImage *gray = [OpenCVManager createGrayIplImageFromUIImage:image]; //これは自分で作った関数 12 //ヒストグラムの階級数 13 float range[]={0,255}; 14 //ヒストグラムを保存するための配列 15 float* ranges[]={range}; 16 int histSize; 17 histSize=256; 18 CvHistogram* hist; 19 //ヒストグラムの生成 20 hist=cvCreateHist(1,&histSize,CV_HIST_ARRAY,ranges,1); 21 //ヒストグラムの計算 22 cvCalcHist(&gray,hist,0,NULL); 23 24 cvReleaseImage(&gray); 25}

これを単純に

C++

1+(CvHisogram*) makeHistgramFromImage:(UIImage *)image 2{ 3 // transform UIImagge to cv::Mat 4 // transform the cv::Mat color image to gray 5 cv::Mat imageMat; 6 UIImageToMat(image, imageMat); 7 cv::Mat grayMat; 8 cv::cvtColor (imageMat, grayMat, CV_BGR2GRAY); 9 image = MatToUIImage(grayMat); 10 // 画像の読み込み 11 IplImage *gray = [OpenCVManager createGrayIplImageFromUIImage:image]; //これは自分で作った関数 12 //ヒストグラムの階級数 13 float range[]={0,255}; 14 //ヒストグラムを保存するための配列 15 float* ranges[]={range}; 16 int histSize; 17 histSize=256; 18 CvHistogram* hist; 19 //ヒストグラムの生成 20 hist=cvCreateHist(1,&histSize,CV_HIST_ARRAY,ranges,1); 21 //ヒストグラムの計算 22 cvCalcHist(&gray,hist,0,NULL); 23 24 cvReleaseImage(&gray); 25 return hist; 26}

しかし、この関数化したものを呼び出してみると、(以下のは例です)

C++

1+(void) justForExample:(UIImage *)image 2{ 3 CvHistogram *hist = [openCVWrapper makeHistgramFromImage: image]; 4}

上記のエラーが起きます。
やったこととしてはただ関数化してそれをそのまま呼び出しただけなので全く同じことをしているのですが....
ご教示いただけましたら幸いです。

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

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

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

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

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

hoshi-takanori

2020/04/04 09:21

OpenCV よく分かりませんが、Invalid number of channels in input image なので、createGrayIplImageFromUIImage が返す画像のチャンネル数が間違ってるのでは。
chestnutforest

2020/04/04 15:34

ありがとうございます! こちら、しっかりとチャンネル数をみてみたら治りました!
takabosoft

2020/04/09 02:44

解決したのでしたら質問をクローズしてください。
guest

回答1

0

自己解決

修正欄を参照してください

投稿2020/04/09 03:21

chestnutforest

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問