2017-06-12 15 views
2

OpenCVを使って黒い領域をフィルタリングしたい画像がいくつかあります。問題は、これらの画像が衛星映像から得られ、明確な境界線を持たないことです。上記追加画像内OpenCV - 境界線がない領域の輪郭を見つける

、最初は、第二のぼやけたバージョンであるが、私は中央の小さな暗い領域に興味が原画像です。最終的には、このエリアを単一の輪郭エリアとしてマークしたいと考えています。

私の主な問題は、OpenCVのfindContours関数を使用すると、1つ(または2つ)の大きなコンターではなく、小さなコンターをたくさん得ているようです。

私はOpenCVをかなり新しくしているので、どんな助けもありがとう!ここで

+0

を探すあなたは(http://docs.opencv.org/trunk/d5/d69/ [ノイズ除去]をしようとしましたtutorial_py_non_local_means.html)イメージ?これはあなたが持っている唯一のイメージですか、それともフレームのセットですか? – rbaleksandar

+0

返事をありがとう。 2番目の画像はノイズのないバージョンでしょうか?私は当時の1つの画像で操作しています。 – PederBG

+0

はい、そうです。さて、あなたは、画像を腐らせて膨張させることから始めることができます。 – rbaleksandar

答えて

2

は、私は簡単なパイプラインを得ることができただけでいくつかの大まかな結果である: enter image description here コードかなり自明すぎる

import cv2 
import numpy as np 

def nothing(x): 
    pass 

cv2.namedWindow('image') 
cv2.createTrackbar('high','image',0,255,nothing) 
cv2.createTrackbar('low','image',0,255,nothing) 
cv2.namedWindow('Edges') 

while(1): 
    image = cv2.imread("PATH TO IMAGE HERE") 
    imgray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
    high = cv2.getTrackbarPos('high', 'image') 
    low = cv2.getTrackbarPos('low', 'image') 

    edges = cv2.Canny(imgray, low, high) 
    kernel = np.ones((8, 8), np.uint8) 
    closing = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel) 

    cv2.imshow('Edges', closing) 

    ret,thresh = cv2.threshold(closing,low,high,0) 
    im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 
    largest_area = 0 
    largest_contour_index = 0 
    counter = 0 
    for i in contours: 
     area = cv2.contourArea(i) 
     if (area > largest_area): 
      largest_area = area 
      largest_contour_index = counter 

     counter = counter + 1 

    cv2.drawContours(image, contours, largest_contour_index, (0,255,0), 1) 

    cv2.imshow('image', image) 

    k = cv2.waitKey(1) & 0xFF 
    if k == 27: 
     break 

パイプラインは次のとおりです。

  1. スムースイメージを読む
  2. グレースケールに変換
  3. 形態を適用する操作closing(8×8マスク)
  4. 輪郭
  5. 最大の輪郭(賢明なエリア)
+0

ありがとう、これは完全に動作します。読みやすいコード。私はAPIを初めて使っているので、コードを完全に理解するのに少し時間が必要です。後で、これを一般化する方法が問題になるので、別のイメージでも使用できます。 – PederBG

+0

できれば私はこの2つの票を与えるだろう。素晴らしい例... – Mark

関連する問題