去除小面積區域python(小面積取消什麼意思)

本文目錄一覽:

Opencv問題, 怎樣去除二值圖像中面積較小的連通域?

//=======函數實現=====================================================================

void RemoveSmallRegion(Mat Src, Mat Dst, int AreaLimit, int CheckMode, int NeihborMode)

{

int RemoveCount = 0;

//新建一幅標籤圖像初始化為0像素點,為了記錄每個像素點檢驗狀態的標籤,0代表未檢查,1代表正在檢查,2代表檢查不合格(需要反轉顏色),3代表檢查合格或不需檢查

//初始化的圖像全部為0,未檢查

Mat PointLabel = Mat::zeros(Src.size(), CV_8UC1);

if (CheckMode == 1)//去除小連通區域的白色點

{

//cout “去除小連通域.”;

for (int i = 0; i Src.rows; i++)

{

for (int j = 0; j Src.cols; j++)

{

if (Src.atuchar(i, j) 10)

{

PointLabel.atuchar(i, j) = 3;//將背景黑色點標記為合格,像素為3

}

}

}

}

else//去除孔洞,黑色點像素

{

//cout “去除孔洞”;

for (int i = 0; i Src.rows; i++)

{

for (int j = 0; j Src.cols; j++)

{

if (Src.atuchar(i, j) 10)

{

PointLabel.atuchar(i, j) = 3;//如果原圖是白色區域,標記為合格,像素為3

}

}

}

}

vectorPoint2iNeihborPos;//將鄰域壓進容器

NeihborPos.push_back(Point2i(-1, 0));

NeihborPos.push_back(Point2i(1, 0));

NeihborPos.push_back(Point2i(0, -1));

NeihborPos.push_back(Point2i(0, 1));

if (NeihborMode == 1)

{

//cout “Neighbor mode: 8鄰域.” endl;

NeihborPos.push_back(Point2i(-1, -1));

NeihborPos.push_back(Point2i(-1, 1));

NeihborPos.push_back(Point2i(1, -1));

NeihborPos.push_back(Point2i(1, 1));

}

else int a = 0;//cout “Neighbor mode: 4鄰域.” endl;

int NeihborCount = 4 + 4 * NeihborMode;

int CurrX = 0, CurrY = 0;

//開始檢測

for (int i = 0; i Src.rows; i++)

{

for (int j = 0; j Src.cols; j++)

{

if (PointLabel.atuchar(i, j) == 0)//標籤圖像像素點為0,表示還未檢查的不合格點

{ //開始檢查

vectorPoint2iGrowBuffer;//記錄檢查像素點的個數

GrowBuffer.push_back(Point2i(j, i));

PointLabel.atuchar(i, j) = 1;//標記為正在檢查

int CheckResult = 0;

for (int z = 0; z GrowBuffer.size(); z++)

{

for (int q = 0; q NeihborCount; q++)

{

CurrX = GrowBuffer.at(z).x + NeihborPos.at(q).x;

CurrY = GrowBuffer.at(z).y + NeihborPos.at(q).y;

if (CurrX = 0 CurrXSrc.colsCurrY = 0 CurrYSrc.rows) //防止越界

{

if (PointLabel.atuchar(CurrY, CurrX) == 0)

{

GrowBuffer.push_back(Point2i(CurrX, CurrY)); //鄰域點加入buffer

PointLabel.atuchar(CurrY, CurrX) = 1; //更新鄰域點的檢查標籤,避免重複檢查

}

}

}

}

if (GrowBuffer.size()AreaLimit) //判斷結果(是否超出限定的大小),1為未超出,2為超出

CheckResult = 2;

else

{

CheckResult = 1;

RemoveCount++;//記錄有多少區域被去除

}

for (int z = 0; z GrowBuffer.size(); z++)

{

CurrX = GrowBuffer.at(z).x;

CurrY = GrowBuffer.at(z).y;

PointLabel.atuchar(CurrY, CurrX) += CheckResult;//標記不合格的像素點,像素值為2

}

//********結束該點處的檢查**********

}

}

}

CheckMode = 255 * (1 – CheckMode);

//開始反轉面積過小的區域

for (int i = 0; i Src.rows; ++i)

{

for (int j = 0; j Src.cols; ++j)

{

if (PointLabel.atuchar(i, j) == 2)

{

Dst.atuchar(i, j) = CheckMode;

}

else if (PointLabel.atuchar(i, j) == 3)

{

Dst.atuchar(i, j) = Src.atuchar(i, j);

}

}

}

//cout RemoveCount ” objects removed.” endl;

}

//=======函數實現=====================================================================

//=======調用函數=====================================================================

Mat img;

img = imread(“D:\\1_1.jpg”, 0);//讀取圖片

threshold(img, img, 128, 255, CV_THRESH_BINARY_INV);

imshow(“去除前”, img);

Mat img1;

RemoveSmallRegion(img, img, 200, 0, 1);

imshow(“去除後”, img);

waitKey(0);

//=======調用函數=====================================================================

python matplotlib subplot 上面面積大下面小怎麼辦

在matplotlib下,一個Figure對象可以包含多個子圖(Axes),可以使用subplot()快速繪製,其調用形式如下:

subplot(numRows, numCols, plotNum)

圖表的整個繪圖區域被分成numRows行和numCols列,plotNum參數指定創建的Axes對象所在的區域,如何理解呢?

如果numRows = 3,numCols = 2,那整個繪製圖表樣式為3X2的圖片區域,用坐標表示為(1,1),(1,2),(1,3),(2,1),(2,2),(2,3)。這時,當plotNum = 1時,表示的坐標為(1,3),即第一行第一列的子圖;

import numpy as np

python如何刪除二值化圖片中小塊白色區域

如果確定是純白的話你就把rgb都小於某個極小常數的像素點的alpha設成0就好了你說的nodata應該就是透明的意思!

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/309336.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-04 19:30
下一篇 2025-01-04 19:31

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論