python2.7,openCV4.0.0を使っているものです.
ある画像に輪郭抽出を行ったものがこちらになります.
この画像の白い領域のみに格子点を打つプログラムを必要としています.
どなたかわかるかたよろしくお願いします.
python
1#!/usr/bin/env python 2#coding: utf-8 3 4import numpy as np 5 6import cv2, os, csv, math, re 7from operator import itemgetter 8from pylab import show, triplot 9from matplotlib import pyplot as plt 10import triangle as tr 11from matplotlib.patches import Polygon 12 13 14# 画像を読み込む。 15img = cv2.imread('map.pgm', cv2.IMREAD_GRAYSCALE) 16 17#中央値フィルタ 18median = cv2.medianBlur(img, 9) 19 20#ガルシアンフィルタ 21img_preprocessed = cv2.GaussianBlur(median, (5, 5), 0) 22img_preprocessed = cv2.GaussianBlur(img_preprocessed, (5, 5), 50) 23img_preprocessed = cv2.GaussianBlur(img_preprocessed, (5, 5), 50) 24img_preprocessed = cv2.GaussianBlur(img_preprocessed, (5, 5), 50) 25img_preprocessed = cv2.GaussianBlur(img_preprocessed, (5, 5), 50) 26#img_preprocessed = cv2.GaussianBlur(img_preprocessed, (5, 5), 50) 27#img_preprocessed = cv2.GaussianBlur(img_preprocessed, (5, 5), 50) 28#img_preprocessed = cv2.GaussianBlur(img_preprocessed, (5, 5), 50) 29#img_preprocessed = cv2.GaussianBlur(img_preprocessed, (5, 5), 50) 30#img_preprocessed = cv2.GaussianBlur(img_preprocessed, (5, 5), 50) 31#img_preprocessed = cv2.GaussianBlur(img_preprocessed, (5, 5), 50) 32 33# 2値化 34thresh, binary = cv2.threshold(img_preprocessed, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) 35 36# closing でノイズを消す 37kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) 38binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=2) 39 40#輪郭抽出 41contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) 42 43def draw_contours(ax, img, contours): 44 ax.imshow(img_preprocessed, cmap='gray') 45 ax.axis('on') 46 for i, cnt in enumerate(contours): 47 cnt = np.squeeze(cnt, axis=1) 48 # 輪郭の点同士を結ぶ線を描画する。 49 ax.add_patch(Polygon(cnt, color='b', fill=None, lw=2)) 50 # 輪郭の点を描画する。 51 ax.plot(cnt[:, 0], cnt[:, 1], 'ro', mew=0, ms=4) 52 # 輪郭の番号を描画する。 53 ax.text(cnt[0][0], cnt[0][1], i, color='orange', size='20') 54 55fig, ax = plt.subplots(figsize=(10, 10)) 56draw_contours(ax, img, contours) 57plt.show()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/22 06:25
2019/01/22 06:39
2019/01/22 09:24
2019/01/22 09:29 編集
2019/01/22 10:05
2019/01/22 10:13