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

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

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

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

Swift

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

Q&A

1回答

2845閲覧

SwiftでMatOfPoint型をPoint2f型の配列にする方法

kkkky

総合スコア0

OpenCV

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

Swift

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

0グッド

0クリップ

投稿2020/11/16 08:49

前提・実現したいこと

取得した映像からリアルタイムに赤色(赤色の円など)を検出して、その赤色領域の中心座標を取得したいです。

発生している問題・エラーメッセージ

MatOfPoint型をPoint2f型の配列に変換するところでつまづいています。c++ではうまくいった処理がSwiftでは、エラーは出ませんが実行すると処理が停止します。MatOfPoint型のlocationという変数をどうにかしてPoint2f型の配列pointにしたいです。location.toArray()以外の方法があるのでしょうか?

エラーメッセージ Thread 1: "Incompatible Mat" ### 該当のソースコード func convertColor(source srcImage: UIImage) -> UIImage { let srcMat = Mat(uiImage: srcImage) let dstMat = Mat() let dstMat2 = Mat() let s_min = Scalar(120, 150, 75) let s_max = Scalar(130, 255, 255) var center:Point2f = Point2f(x: 0.0, y: 0.0) var radius:Float = 0.0 var prac = [Point2f]([center]) var location = MatOfPoint2f() //HSV画像に変換 Imgproc.cvtColor(src: srcMat, dst: dstMat, code: .COLOR_BGR2HSV) //赤色だけを白色、赤色以外を全て黒色に変換 Core.inRange(src: dstMat, lowerb: s_min, upperb: s_max, dst: dstMat2) //白画素値の位置座標をMat型で取得 Core.findNonZero(src: dstMat2, idx: location) if(!location.empty()){ var point = [Point2f](location.toArray()) Imgproc.minEnclosingCircle(points: point, center: center, radius: &radius) } return dstMat2.toUIImage() } ```ここに言語名を入力 Swift ### 試したこと var point = [Point2f](location.toArray())の部分をvar point = [Point2f](arrayLiteral: (Point2f)(x: -10.0,y: 10.0),(Point2f)(x: 10.0,y: 10.0)) と具体的な値を入力するとエラーが出ないことは確認しています。 ### 補足情報 Swift version 5.3 Xcode version 12.1

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

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

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

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

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

guest

回答1

0

OpenCVのSwiftバインディングの貢献者komakaiです。
以下を試してみてください。

Swift

1var matOfPoint = MatOfPoint() 2let arrayOfPoint2f = matOfPoint.toArray().map { Point2f(x: Float($0.x), y: Float($0.y)) } 3

OpenCVのSwiftバインディングのご利用ありがとうございます!

投稿2020/12/31 05:06

komakai

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問