前提・実現したいこと
実験データの画像解析にopencvを利用しようとしています.
画像から輪郭を抽出し,正しく輪郭を抽出できているか確認するために輪郭の座標データを散布図にプロットしています.
発生している問題・エラーメッセージ
コードを実行すると,左図のような輪郭が抽出され,右図の散布図とは定性的に異なります.
これは,正しく輪郭の座標を取得できているのでしょうか?また,できていない場合改善策を教えていただきたいです.
エラーメッセージ
該当のソースコード
import cv2 import numpy as np import csv import matplotlib.pyplot as plt import pandas as pd from matplotlib.patches import Polygon import glob import pylab img = cv2.imread('D:/github/sample/python/opencv/laplacian/bubble2.tif') gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) #grayを閾値処理 thresh = cv2.threshold(gray, 210, 255, cv2.THRESH_BINARY)[1] dst = cv2.Laplacian(thresh, cv2.CV_32F, ksize=3) #dstをFloat64からuint8に変換 dst_uint8 = dst.astype(np.uint8) #dstから輪郭検出 _,contours,hierarchy = cv2.findContours(dst_uint8.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) #輪郭をそのまま書き込み areaframe = cv2.drawContours(img, contours,-1,(0,255,0),1) x_list = [] y_list = [] for i in range(0, len(contours)): if len(contours[i]) > 0: cv2.polylines(img, contours[i], True, (0, 255, 0), 1) buf_np = contours[i].flatten() # numpyの多重配列になっているため、一旦展開する。 #print(buf_np) for i, elem in enumerate(buf_np): if i%2==0: x_list.append(elem) else: y_list.append(elem*(-1)) plt.scatter(x_list, y_list) print(x_list) print(y_list) cv2.waitKey(0) cv2.destroyAllWindows()
試したこと
散布図がy軸方向に圧縮されているように見えたので,y軸の値に倍率を掛けても散布図の形は変化しませんでした.
補足情報(FW/ツールのバージョンなど)
こにより詳細な情報を記載してくださこい。
回答1件
あなたの回答
tips
プレビュー