簡體   English   中英

如何在 CImg 庫中使用 label() 功能

[英]How to use the label() functionality in CImg library

我正在尋找有關如何將 label() 功能與 CImg 庫一起使用的幫助。 我想做的很簡單。 我有一個白色背景,大黑點彼此分開,我只想數一數。 我認為 label() 是可能的,但我不明白這個 function 的參數。 感謝您的幫助 !

圖書館信息:[1]: https://cimg.eu/reference/structcimg__library_1_1CImg.html#aaff4a10071470e4cd255653c5c2f043e

基本上,您將一個圖像傳遞給它,它會返回另一個圖像,其中每組相似像素都分配給相同的 class,即它具有相同的灰度強度。 所以,如果我們從這個開始:

在此處輸入圖像描述

運行這個:

#include "CImg.h"
#include <iostream>

using namespace cimg_library;
using namespace std;

int main()
{
    // Create solid white image 
    CImg<unsigned char> img(320,240);
    img.fill(255);

    // Draw some black circles
    unsigned char black[] = {0};
    img.draw_circle(50, 50,30,black);
    img.draw_circle(130,100,50,black);
    img.draw_circle(200,200,35,black);
    img.draw_circle(280,140,30,black);
    img.save("start.png");

    // Label the connected components
    CImg<> labels = img.label(true,64);

    // Save result
    labels.save("result.png");

}

我們會得到這個:

在此處輸入圖像描述

這是非常令人印象深刻的,直到我們查看直方圖 - 我在這里使用ImageMagick

identify -verbose result.png

Image:
  Filename: result.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: PseudoClass
  Geometry: 320x240+0+0
  Units: Undefined
  Colorspace: Gray
  Type: Grayscale
  Base type: Undefined
  Endianness: Undefined
  Depth: 8-bit
  Channel depth:
    Gray: 8-bit
  Channel statistics:
    Pixels: 76800
    Gray:
      min: 0  (0)
      max: 4 (0.0156863)
      mean: 0.565234 (0.00221661)
      median: 0 (0)
      standard deviation: 1.13898 (0.00446658)
      kurtosis: 2.3448
      skewness: 1.89382
      entropy: 0.520843
  Colors: 5
  Histogram:
    59036: (0,0,0) #000000 gray(0)      <--- HERE
    2909: (1,1,1) #010101 gray(1)
    8005: (2,2,2) #020202 gray(2)
    2909: (3,3,3) #030303 gray(3)
    3941: (4,4,4) #040404 gray(4)   

你可以看到有 5 個不同的灰度值,對應於輸入圖像中的 5 個分量。 我還可以對圖像進行對比拉伸,以便您可以看到組件,每個組件都以不同的強度標識:

magick result.png -auto-level z.png

在此處輸入圖像描述

true參數告訴CImg將任何像素的東北部、東南部、西南部和西北部視為連接的組件。 如果你設置這個false ,它只考慮任何像素的北、南、東和西鄰域被連接。

閾值表示一個像素在其 class 中可能與其他像素有多少不同,同時仍被認為足夠相似以成為鄰居 - 所以它是顏色匹配的容差。

關鍵詞:C++,CImg,圖像處理,標簽,label,連通分量分析,斑點分析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM