计算二进制图像中的对象

时间:2018-04-04 14:04:54

标签: python image-processing image-segmentation

我正在使用二进制图像,其中有很多小blob。我想计算blob的数量,并发现轮廓通常用来做那个。但是,我得到的信息不允许我测量某些参数,例如这些斑点的面积和周长。有没有人有任何建议如何用Python做到这一点?

<!DOCTYPE HTML>

<html>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"      integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="     crossorigin="anonymous"></script>

<style>
.header-class{
 font-size:25px;
 font-family:cursive;
 background-color:lightgray;
 cursor:pointer;
}
.members {
 font-family:helvetica;
}
.blips {
 color:red;
}
.crudz {
 color:blue;
}
.satin-flings {
 color:rgb(213, 194, 0);
}
td {
 padding-right:10px;
 padding-left:10px;
 border: 10px;
}
</style>

<body>

<button class="tableRevmoveButton"> Remove table </button>
<button class="tableAddButton"> Add table </button>
<button class="tableAddNewButton"> Add different table </button>

<div class="tabel">
 <table class="itdev_people">
   <tr class="header-class">
      <td colspan="4">The Blips</td>
  </tr>
  <tr class="members blips">
      <td>Rotton </td>
      <td>Rob</td>
      <td>ttt</td>
  </tr>
  <tr class="members blips">
      <td>Effram</td>
      <td>The Dumb Rabbot</td>
  </tr>
  <tr class="members blips">
      <td>Effram</td>
      <td>The Dumb Rabbot</td>
  </tr>

  <tr class="header-class">
      <td colspan="2">The Crudz</td>
  </tr>
  <tr class="members crudz">
      <td>Jason</td>
      <td>"Sky" Halker</td>
  </tr>
  <tr class="members crudz">
      <td>Sparky</td>
      <td>That stupid Eagle</td>
  </tr>

  <tr class="header-class">
      <td colspan="2">The Satin Flings</td>
  </tr>
  <tr class="members satin-flings">
      <td>Josh-man</td>
      <td>McDanielson-man III</td>
  </tr>
  <tr class="members satin-flings">
      <td>Dominque</td>
      <td>The Christmas Donkey</td>
  </tr>

  <tr class="header-class">
      <td colspan="2">The Satin Flings</td>
  </tr>
  <tr class="members satin-flings">
      <td>Josh-man</td>
      <td>McDanielson-man III</td>
  </tr>
  <tr class="members satin-flings">
      <td>Dominque</td>
      <td>The Christmas Donkey</td>
  </tr>

</table>
</div>

<script>
//Table action
$('.header-class').click(function() {
 console.log('clicked');
 if ($(this).hasClass('collapsed')) {
 $(this)
  .nextUntil('tr.header-class')
  .find('td')
  .parent()
  .find('td > div')
  .slideDown('fast', function() {
    var $set = $(this);
    $set.replaceWith($set.contents());
  });
 $(this).removeClass('collapsed');
} else {
$(this)
  .nextUntil('tr.header-class')
  .find('td')
  .wrapInner('<div style="display: block;" />')
  .parent()
  .find('td > div')
  .slideUp('fast');
   $(this).addClass('collapsed');
}
});

//Table Remove Button action
$('.tableRevmoveButton').click(function() {
     $('.tabel').remove();
     console.log('Remove table');
 });

//Table add Button action für add
$('.tableAddButton').click(function() {
   $('body').append('.tabel');
   console.log('Add table');
});
</script>

</body>

</html>

1 个答案:

答案 0 :(得分:0)

一旦有了轮廓,就可以使用cv2.contourArea()和cv2.arclength()函数分别得到面积和周长。例如,假设您想要找到第一个轮廓的面积和周长。代码将是这样的:

contour_area = cv2.contourArea(contours[0])
cont_perimeter = cv2.arcLength(contours[0], True)

您还可以使用这些功能对找到的轮廓进行排序。例如,要根据区域对轮廓进行排序,

sorted_contours = sorted(contours, key=cv2.contourArea, reverse=True)

此处,&#39;反向=真&#39;对它进行排序并按降序排列 - 从最大到最小。现在,当您访问sorted_contours [0]时,这是您找到的最大轮廓。您还可以使用其他参数对它们进行排序。有关您可以提取的某些轮廓特征(如力矩,面积,周长等)的文档,请参阅here。希望这有帮助!