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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

2659閲覧

python openCV を用いた輪郭形成方法について

gonzoshira

総合スコア21

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/01/18 05:06

編集2019/06/22 10:10

python2.7,openCV4.0.0を使っています.
添付してある画像は見てもらうとわかりますが白とグレーからなる地図の画像です.
この画像に対し.色と色との間に黒で輪郭をつけそれを元にopenCVで輪郭取得を
したいとおもっております.

この輪郭取得は分かるのですが画像にpythonを用いて輪郭をつける方法がわかりません.

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

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

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

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

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

tiitoi

2019/01/18 05:24

画像が添付されていません。
gonzoshira

2019/01/18 07:07

添付できてませんでした. 申し訳ございません.
guest

回答2

0

説明不足の分ですいませんが
回答ありがとうございます。
最終的には白で書かれた領域をボロノイ分割したいと考えております。
そのために色々困っており大変ありがたいです。

投稿2019/01/20 06:31

gonzoshira

総合スコア21

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

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

0

色と色との間に黒で輪郭をつけそれを元にopenCVで輪郭取得を

したいとおもっております.

「輪郭をつける」の意味がよくわかりませんが、輪郭を画像から抽出したいということでしょうか?

輪郭抽出

python

1import cv2 2import numpy as np 3 4# 画像を読み込む。 5img = cv2.imread('test.png', cv2.IMREAD_GRAYSCALE) 6 7# 2値化 8thresh, binary = cv2.threshold( 9 img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) 10 11# closing でノイズを消す 12kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) 13binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=2) 14 15# 輪郭抽出する。(OpenCV 3) 16_, contours, hierarchy = cv2.findContours( 17 binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) 18 19# OpenCV4 の場合 20#contours, hierarchy = cv2.findContours( 21# binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

結果描画

python

1import matplotlib.pyplot as plt 2from matplotlib.patches import Polygon 3 4def draw_contours(ax, img, contours): 5 ax.imshow(img, cmap='gray') 6 ax.axis('off') 7 for i, cnt in enumerate(contours): 8 cnt = np.squeeze(cnt, axis=1) # (NumPoints, 1, 2) -> (NumPoints, 2) 9 # 輪郭の点同士を結ぶ線を描画する。 10 ax.add_patch(Polygon(cnt, color='b', fill=None, lw=2)) 11 # 輪郭の点を描画する。 12 ax.plot(cnt[:, 0], cnt[:, 1], 'ro', mew=0, ms=4) 13 # 輪郭の番号を描画する。 14 ax.text(cnt[0][0], cnt[0][1], i, color='orange', size='20') 15 16fig, ax = plt.subplots(figsize=(6, 6)) 17draw_contours(ax, img, contours) 18plt.show()

抽出した輪郭を可視化

イメージ説明

投稿2019/01/18 07:24

tiitoi

総合スコア21956

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

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

gonzoshira

2019/01/21 00:16

回答ありがとうございました。 今後は白の領域にボロノイ分割をしたいと考えております.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問