質問編集履歴

4

より多くの方に見てもらえるようにタグを追加

2022/10/25 11:47

投稿

m-mega
m-mega

スコア56

test CHANGED
File without changes
test CHANGED
File without changes

3

タイトルの変更

2022/10/20 23:04

投稿

m-mega
m-mega

スコア56

test CHANGED
@@ -1 +1 @@
1
- SwiftUIとOpenCVで検出した輪郭の面積を求めたい
1
+ OpenCVで検出したの面積を求めたい
test CHANGED
File without changes

2

補足情報を編集

2022/10/20 10:32

投稿

m-mega
m-mega

スコア56

test CHANGED
File without changes
test CHANGED
@@ -226,6 +226,7 @@
226
226
  detectColor(mMatChange!!) // 輪郭面積に応じた処理を実行
227
227
  return mMat // プレビュー画像を返す
228
228
  }
229
+ ...
229
230
  ```
230
231
 
231
232
  ### 参考サイト

1

補足情報を追記

2022/10/20 10:30

投稿

m-mega
m-mega

スコア56

test CHANGED
File without changes
test CHANGED
@@ -176,11 +176,57 @@
176
176
  }
177
177
  ```
178
178
 
179
- ### 補足情報(FW/ツールのバージョンなど)
179
+ ### 補足情報(FW/ツールのバージョンなど)
180
180
  - iOS:15.7
181
181
  - Xcode:13.1
182
182
  - OpenCV:opencv-4.6.0-ios-framework
183
183
  [OpenCV4.6.0ダウンロードサイト](https://github.com/opencv/opencv/releases)
184
+
185
+ ### 補足情報②(Android版について)
186
+ 以前に、Androidでも同様の機能を持ったアプリを作成しました。
187
+ その際は、下記のプログラムで輪郭の面積を出すことができていました。
188
+ ```kotlin
189
+ // 認識した色に応じた処理を実行
190
+ ...
191
+ private fun detectColor(img:Mat):Boolean {
192
+ Core.inRange(img, Scalar(0.0, 0.0, 0.0)
193
+ , Scalar(255.0, 255.0, 255.0)
194
+ , img)
195
+ // 色の輪郭の面積に応じた処理を実行
196
+ return compareContourColor(detectContour(img))
197
+ }
198
+
199
+ private fun detectContour(img:Mat): Int {
200
+ // ガウシアンフィルタで画像をぼかす
201
+ Imgproc.GaussianBlur(img, img, Size(5.0, 5.0), 5.0)
202
+ // 輪郭を取得
203
+ Imgproc.Canny(img, img, 10.0, 360.0)
204
+ // 輪郭の情報を取得
205
+ val contours: List<MatOfPoint> = ArrayList()
206
+ val hierarchy = Mat.zeros(Size(5.0, 5.0), CvType.CV_8UC1)
207
+ Imgproc.findContours(img,
208
+ contours, // 輪郭情報を格納
209
+ hierarchy, // 階層構造を格納
210
+ Imgproc.RETR_EXTERNAL, // 輪郭抽出モードを指定
211
+ Imgproc.CHAIN_APPROX_SIMPLE // 輪郭の表示方法を指定
212
+ )
213
+ return contours.size
214
+ }
215
+
216
+ private fun compareContourColor(size:Int):Boolean {
217
+ ... // 取得した輪郭面積に応じた処理を実行
218
+ }
219
+
220
+ // カメラ映像の各フレームに対する処理
221
+ override fun onCameraFrame(inputFrame: CameraBridgeViewBase.CvCameraViewFrame): Mat? {
222
+ // カメラプレビューの各フレームをフルカラーで取得
223
+ mMat = inputFrame.rgba()
224
+ Imgproc.cvtColor(mMat, mMatChange, Imgproc.COLOR_RGBA2BGR) // MatをRGBAからBGRに変換
225
+ Imgproc.cvtColor(mMatChange, mMatChange, Imgproc.COLOR_BGR2HSV) // MatをBGRからHSVに変換
226
+ detectColor(mMatChange!!) // 輪郭面積に応じた処理を実行
227
+ return mMat // プレビュー画像を返す
228
+ }
229
+ ```
184
230
 
185
231
  ### 参考サイト
186
232
  [OpenCVのSwift用ドキュメント](http://xtravision.stars.ne.jp/opencv-objc-doc-test/docs/index.html)