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

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

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

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

OpenCV

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

C++

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

Q&A

解決済

1回答

2072閲覧

iOSでopenCV画像解析した座標データをswiftで扱いたい

katsuhiro.eqol

総合スコア7

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

OpenCV

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

C++

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

1グッド

0クリップ

投稿2020/03/14 06:44

openCVの画像解析を使ったiOSのアプリの作成を検討中です。swiftでは直接openCVは扱えず、objective Cでbridgeして使うしかなく、objective C/openCVの使い方で難航しています。
以下を参考にして、UIImageをopenCVで処理したUIImageに変換することはできるようになりましたが、openCVで取得した特徴量、例えばHoughCirclesで取得した円の中心、半径をswiftのコードで扱うことができていません。

iPhoneアプリでOpenCV(CocoaPodsを使用しないVer)

以下を参考に、画像を取得する際にポインタで特徴量を同時に取得することを試みていますが、
SwiftとObjective-Cの関数との間での参照渡し

swift

1//objective-Cでの関数設定 2-(UIImage *)getCenter:(UIImage *)input_img center: (NSMutableArray *)center; 3//swift 4circle_img = openCV.getCenter(image.image!, center: &center)

しかしこのswiftコード部分で

'&' used with non-inout argument of type 'NSMutableArray'

とエラーがでてしまいます。参考にしているサイトだと問題なさそうなのですが、何が悪いのか見つけられていません。
この方法以外でも特徴量をswiftで扱うことができれば構いません。
アドバイスいただきたくお願いします。

s.k👍を押しています

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

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

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

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

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

katsuhiro.eqol

2020/03/18 04:36

ありがとうございます。提案いただいた方法でクリアできました。 NSMutableArrayと向き合ったのが初めてで苦労しました。勉強になりました。
guest

回答1

0

ベストアンサー

HoughCircles の結果は一つの値ではなく vector<Vec3f> なので、これをどう Objective-C 経由で Swift に返すかの問題になります。NSMutableArray に float の値をひとつひとつ突っ込んでもらうことにするなら、

ObjC

1- (UIImage *)getCenter:(UIImage *)input_img center: (NSMutableArray *)center { 2 // 略 3 4 std::vector<cv::Vec3f> circles; 5 cv::HoughCircles(gray_image, circles, /* ... */); 6 for (auto &vec : circles) { 7 [array addObject:[NSNumber numberWithFloat:vec[0]]]; 8 [array addObject:[NSNumber numberWithFloat:vec[1]]]; 9 [array addObject:[NSNumber numberWithFloat:vec[2]]]; 10 } 11 12 // 略 13}

Swift

1 let circles = NSMutableArray() 2 let resultImage = openCV.getCenter(image, circles: circles) 3 for i in 0..<(circles.count / 3) { 4 if let x = circles[i * 3] as? NSNumber, 5 let y = circles[i * 3 + 1] as? NSNumber, 6 let radius = circles[i * 3 + 2] as? NSNumber { 7 print("x: (x.floatValue), y: (y.floatValue), radius: (radius.floatValue)") 8 } 9 }

となりますが、一つ一つの float が NSNumber オブジェクトになって無駄が多いので、NSMutableData を使った方が効率的だと思います。(が、C でメモリーを扱う知識が必要です。)

投稿2020/03/15 07:35

hoshi-takanori

総合スコア7895

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問